You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala中合并两行数据为单行的问题(GroupBy未生效)

Spark Scala合并同组多行数据解决方案

针对你遇到的问题,核心是按共同的键(col1、col2、col3)分组,然后对每个需要合并的列提取非空值。这里可以用groupBy配合聚合函数实现——因为你的两行数据中,col4和col5分别只有一个非空值,用max或first(忽略null)就能拿到目标值。

代码实现示例

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object MergeRows {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("MergeRowsExample")
      .master("local[*]")
      .getOrCreate()

    import spark.implicits._

    // 模拟输入数据(空值用null表示)
    val inputDF = Seq(
      ("2023-02-27", "LHR", "SFO", "931", null),
      ("2023-02-27", "LHR", "SFO", null, "977")
    ).toDF("col1", "col2", "col3", "col4", "col5")

    // 分组聚合:按col1、col2、col3分组,提取col4和col5的非空值
    val mergedDF = inputDF.groupBy("col1", "col2", "col3")
      .agg(
        max("col4").alias("col4"),
        max("col5").alias("col5")
      )

    // 打印结果
    mergedDF.show()
  }
}

代码说明

  • groupBy("col1", "col2", "col3"):将日期、出发地、目的地完全一致的行归为同一组
  • max("col4"):每组中col4只有一个非空值,max会自动忽略null,返回该非空值;也可以用first("col4", ignoreNulls=true)实现同样效果
  • 执行后得到的DataFrame就是你期望的合并结果

最终输出

+----------+----+----+----+----+
|      col1|col2|col3|col4|col5|
+----------+----+----+----+----+
|2023-02-27| LHR| SFO| 931| 977|
+----------+----+----+----+----+

内容的提问来源于stack exchange,提问作者skd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:33:22