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进行查询返回。
- 从Spark数据源直接创建
SQL风格语法
- 创建表,并查询
createGlobalTempView : 全局
createOrReplaceTempView : 有覆盖
createTempView:简单表
- 创建全局表:跨会话,可以使用spark.session
DSL风格语法
DataFrame提供一个特定领域语言(domain-specific language, DSL)去管理结构化的数据,可以在 Scala, Java, Python 和 R 中使用 DSL,使用 DSL 语法风格不必去创建临时视图了
- 查看DataFrame的Schema信息
- 只查看”name”列数据
- 查看”name”列数据以及”age+1”数据 :涉及到运算的时候, 每列都必须使用$
- 查看”age”大于”19”的数据 和 按照”age”分组,查看数据条数
RDD转换为DataFrame
如果需要RDD与DF或者DS之间操作,那么都需要引入 import spark.implicits._ (spark不是包名,而是sparkSession对象的名称,所以必须先创建SparkSession对象再导入. implicits是一个内部object)
- 导包
- 在/opt/module/spark-local/目录下准备people.txt
- 创建RDD
通过手动确定转换
通过样例类反射转换(常用)
- 创建一个样例类
- 根据样例类将RDD转换为DataFrame
DataFrame转换为RDD
将DataFrame转换为RDD:得到的RDD存储类型为Row,然后打印