1. select (字段名)
用于从数据集中筛选出需要的特定字段。例如:df.select("name", "age")
会只保留数据中的 "name" 和 "age" 两个字段。
2. show () 与 limit (n)
show()
:默认显示数据集的前 20 条记录,方便快速预览数据show(n)
:显示数据集的前 n 条记录,如show(10)
显示前 10 条limit(n)
:获取数据集的前 n 条记录,并返回一个新的 DataFrame,如df.limit(5)
得到包含前 5 条记录的新数据集
3. filter/where (条件)
用于筛选满足指定条件的记录,两者功能基本相同。例如:
df.filter("age > 18")
筛选出年龄大于 18 的记录df.where(col("score") >= 60)
筛选出分数大于等于 60 的记录
4. join (连接操作)
用于将两个数据集按照一定条件合并:
join(df)
:默认进行笛卡尔积连接,会将第一个表的每一行与第二个表的每一行组合,通常不直接使用join(df, 连接条件)
:根据指定条件连接,如df1.join(df2, df1("id") == df2("user_id"))
join(df, 连接条件, 连接类型)
:指定连接类型,常见类型有 inner (内连接)、left (左连接)、right (右连接)、full (全连接)
5. as (别名)
为数据集或字段起别名,方便后续引用。例如:df.as("user_data")
给数据集起别名;df.select(col("name").as("username"))
给字段起别名
6-7. 分组聚合操作
-
groupBy(字段名)
:根据指定字段对数据进行分组 -
分组后可结合以下聚合函数:
avg/mean(字段名)
:计算分组后指定字段的平均值sum(字段名)
:计算分组后指定字段的总和max(字段名)
:获取分组后指定字段的最大值min(字段名)
:获取分组后指定字段的最小值count()
:统计每个分组的记录条数
例如:
df.groupBy("department").avg("salary")
计算每个部门的平均工资
8. orderBy
对数据按照指定字段进行排序,默认是升序。例如:df.orderBy("age")
按年龄升序排列;df.orderBy(col("score").desc())
按分数降序排列
9. withColumn
用于新增列或修改已有列:
- 新增列:
df.withColumn("new_column", col("old_column") * 2)
新增一列,值为旧列的 2 倍 - 修改列:如果指定的列名已存在,则会替换该列的值;也可用于数据类型转换,如
df.withColumn("age", col("age").cast("int"))
10. row_number () 窗口函数
用于在分组内对记录进行编号,常与窗口函数结合使用:
plaintext
df.withColumn("rank", row_number().over(
Window.partitionBy("department").orderBy(col("salary").desc())
))
表示按部门分组,在每个部门内按工资降序排列并标记行号
11. withColumnRenamed
用于重命名字段:df.withColumnRenamed("old_name", "new_name")
将字段 "old_name" 重命名为 "new_name"
12. agg (聚合函数)
对整个数据集进行聚合操作,可同时对多个字段进行不同计算:
plaintext
df.agg(
avg("age").alias("avg_age"),
max("salary").alias("max_salary"),
min("score").alias("min_score")
)
13. na.drop()
删除数据中包含 NULL 值的行,例如:df.na.drop()
会移除所有含有空值的记录
14. to_date
将字符串类型的字段转换为日期类型:
to_date(col("date_str"), "yyyyMMdd")
将 "20231207" 格式的字符串转为日期to_date(col("date_str"), "yyyy-MM-dd")
将 "2023-12-07" 格式的字符串转为日期
15. 日期类型操作
对日期类型字段进行提取:
year(col("date"))
:提取年份month(col("date"))
:提取月份dayofmonth(col("date"))
:提取日dayofweek(col("date"))
:提取星期几(1 表示星期日,7 表示星期六)weekofyear(col("date"))
:提取该日期是当年的第几周
这些操作可以组合使用,实现复杂的数据处理和分析需求。