theme: fancy
持续创作,加速成长!这是我参与「掘金日新计划 · 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| +---+------+---+
``` 3. 查询年龄大于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)