Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

DataFrame

Spark SQL的DataFrame API 允许我们使用 DataFrame 而不用必须去注册临时表或者生成SQL表达式。DataFrame API 既有transformation操作也有action操作,DataFrame的转换从本质上来说更具有关系, 而 DataSet API 提供了更加函数式的 API

创建DataFrame

在Spark SQL中SparkSession是创建DataFrame和执行SQL的入口,创建DataFrame有三种方式:通过Spark的数据源进行创建;从一个存在的RDD进行转换;还可以从Hive Table进行查询返回。

  1. 从Spark数据源直接创建

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

SQL风格语法

  1. 创建表,并查询
    createGlobalTempView : 全局
    createOrReplaceTempView : 有覆盖
    createTempView:简单表

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 创建全局表:跨会话,可以使用spark.session

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

DSL风格语法

DataFrame提供一个特定领域语言(domain-specific language, DSL)去管理结构化的数据,可以在 Scala, Java, Python 和 R 中使用 DSL,使用 DSL 语法风格不必去创建临时视图了

  1. 查看DataFrame的Schema信息

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 只查看”name”列数据

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 查看”name”列数据以及”age+1”数据 :涉及到运算的时候, 每列都必须使用$

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 查看”age”大于”19”的数据 和 按照”age”分组,查看数据条数

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

RDD转换为DataFrame

如果需要RDD与DF或者DS之间操作,那么都需要引入 import spark.implicits._ (spark不是包名,而是sparkSession对象的名称,所以必须先创建SparkSession对象再导入. implicits是一个内部object)

  1. 导包

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 在/opt/module/spark-local/目录下准备people.txt

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 创建RDD

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

通过手动确定转换

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

通过样例类反射转换(常用)

  1. 创建一个样例类

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

  1. 根据样例类将RDD转换为DataFrame

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD

DataFrame转换为RDD

将DataFrame转换为RDD:得到的RDD存储类型为Row,然后打印

Spark-SQL中的DataFrame|SQL风格语法|DSL风格语法|RDD转换为DataFrame|手动转换|样例类反射转换|DataFrame转换为RDD