DataFrame的DataFrame的常用操作

359 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

DataFrame提供了两种语法风格,即DSL风格语法和SQL风格语法。二者在功能上并无区别,仅仅是根据用户习惯,自定义选择操作方式.

  • DSL风格 DataFrame提供了一个领域特定语言(DSL)以方便操作结构化数据。
  • SQL风格 在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回,使用SQL风格操作的前提是将DataFrame注册成一个临时表。

1. DSL风格操作DataFrame

image.png

image.png groupBy()方法返回的是一个GroupedData对象,GroupedData对象可调用的常用的方法如下。

image.png

image.png

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|
+---+------+---+

  1. 查询年龄大于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)