SparkSQL和Hive语法差异

SparkSQL和Hive语法差异

1、仅支持Hive

  1. SparkSQL关联条件on不支持函数rand()
  2. 创建零时表时,Spark不支持直接赋值null
  3. Spark无法读取字段类型为void的表
  4. SparkSQL中如果表达式没有指定别名,SparkSQL会将整个表达式作为别名,如果表达式中包含特殊字符(如逗号)。则CTAS建表会失败

2、仅支持SparkSQL

SparkSQL允许在join on条件中使用or等不等式值关联语句,Hive中不允许,只能用等值关联

3、相同函数差异

  1. Spark运行时用到的hash函数,与hive的哈希算法不同,如果使用hash(),结果和hive的hash()会有差异
  2. Hive和sparkSQL使用grouping sets生成的grouping_id不一致
  3. regexp_extract未匹配上的话,hive里回的是null,但是在spark里返回的是空字符
  4. sparkSQL中的row_number的over中不能省略sort by 或order by
  5. grouping_id()函数生成的数据不同
  6. reflect()函数中,如果入参有非法数据或者null,hive会返回null,而spark会抛出异常

创建DataFrame

Row 类型 表示一行数据

  • datafram就算是多行构成

    Row行数据操作

    导入行类

    from pyspark.sql import Row
    定义每行数据 有两种获取方法=重点
    r1 = Row(id=1,name='张三')
    r2 = Row(id=2,name='李四')

    操作每行数据

    获取对应字段数据

    print(r1.id)
    print(r1.name)
    print(r2['id'])
    print(r2['name'])

    复制代码
      						定义行数据不指定字段 = 只有一种获取方法

    r3 = Row(3,'王五')
    print(r3[1])

    df.printSchema()

schema表信息(这种指定表信息的更不常用

  • 定义dataframe中的表的字段名和字段类型

    导入数据类型

    from pyspark.sql.types import *

    定义schema信息

    使用StructType类进行定义

    add()方法是指定字段信息

    第一参数,字段名

    第二个参数,字段信息

    第三个参数是否允许为空值 默认是True,允许为空

    schema_type = StructType().
    add('id',IntegerType()).
    add('name',StringType()).
    add('age',IntegerType(),False)

    df.printSchema()

    导入行类Row

    from pyspark.sql import SparkSession, Row
    from pyspark.sql.types import *

    创建行数据

    r1 = Row(id=1, name='张三', age=20)
    r2 = Row(id=2, name='李四', age=22)

    创建元数据

    schema = StructType().
    add('id', IntegerType()).
    add('name', StringType()).
    add('age', IntegerType())

    创建dataframe

    生成sparksession对象 按照固定写法创建

    ss = SparkSession.builder.getOrCreate()

    使用sparksession对象方法创建df

    createDataFrame 第一参数是一个列表数据,将每行数据放入列表

    第二个参数指定表元数据信息

    df是一个dataframe类型的对象

    df = ss.createDataFrame([r1, r2], schema=schema)

    dataframe数据的操作

    查看df数据

    df.show() # 查看所有数据,超过20行时,默认只显示20行

    查看元信息

    df.printSchema()

相关推荐
KmSH8umpK18 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
KmSH8umpK20 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
_F_y1 天前
仿RabbitMQ实现消息队列-服务端核心模块实现(4)
分布式·rabbitmq
Albert Edison1 天前
【RabbitMQ】发布确认模式(使用案例)
分布式·rabbitmq·ruby
二十六画生的博客1 天前
每个subtask都提交一份快照到hdfs,会把10个小的快照合并成一个大的吗?谁来合并?
大数据·hadoop·hdfs·flink
juniperhan1 天前
Flink 系列第24篇:Flink SQL 集成维度表指南:存储选型、参数调优与实战避坑
大数据·数据仓库·sql·flink
隐于花海,等待花开1 天前
41.ABS / POW / SQRT 函数深度解析
大数据·hive
EXnf1SbYK1 天前
Redis分布式锁进阶第十二篇:全系列终极兜底复盘 + 锁架构巡检落地 + 线上零事故收尾方案
redis·分布式·架构
EXnf1SbYK1 天前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK1 天前
Redis分布式锁进阶第十一篇
数据库·redis·分布式