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
相关产品推荐
相关产品推荐

