持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
DataFrame提供了两种语法风格,即DSL风格语法和SQL风格语法。二者在功能上并无区别,仅仅是根据用户习惯,自定义选择操作方式.
- DSL风格 DataFrame提供了一个领域特定语言(DSL)以方便操作结构化数据。
- SQL风格 在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回,使用SQL风格操作的前提是将DataFrame注册成一个临时表。
1. DSL风格操作DataFrame
groupBy()方法返回的是一个GroupedData对象,GroupedData对象可调用的常用的方法如下。
2. SQL风格操作DataFrame
DataFrame可以被看作是一个关系型 数据表,然后可以在程序中使用spark.sql()方法执行SQL查询,结果将作为一个DataFrame返回。
步骤1. 将DataFrame注册成一个临时表
scala > personDF.registerTempTable("t_person")
步骤2. 调用spark.sql() 方法查询年龄最大的前两名人的信息
scala > spark.sql("select * from t_person order by age desc limit 2").show()
+---+------+---+
| id| name|age|
+---+------+---+
| 6| jerry| 40|
| 5|tianqi| 35|
+---+------+---+
- 查询年龄大于25的人的信息
scala > spark.sql("select * from t_person where age > 25").show()
+---+-------+---+
| id | name |age|
+---+-------+---+
| 2 | lisi | 29 |
| 4 | zhaoliu| 30 |
| 5 | tianqi | 35 |
| 6 | jerry | 40 |
+---+-------+---+
3.保存DataFrame,有以下三种形式:
- 保存成文本文件
- 保存到外部数据库
- 保存为Hive表
write()方法可以将DataFrame保存,write操作有mode方法,可以指定当数据已经存在的情况如何处理。 Overwrite代表覆盖目录下之前存在的数据。
Append代表给指导目录下追加数据。
Ignore代表如果目录下已经有文件,那就什么都不执行。
ErrorIfExists代表如果保存目录下存在文件就报错。
保存DataFrame——保存成文本文件
df.write.mode("overwrite").parquet(path: String)
df.write.mode("overwrite"). json(path: String)
df.write.mode("overwrite").option("header", "true").option("sep", ";"). csv(path: String)
df.write.mode("overwrite").text(path: String) //只能有一个String字段
保存DataFrame——保存到外部数据库
jdbc(url: String, table: String, Properties: Properties)
保存DataFrame——保存为Hive表
df.write.mode("overwrite"). saveAsTable(tableName: String)