如何汇总以下数据帧,即只有公共密钥的单个记录及其作为元组的值并保持值的顺序。
我可以进行汇总但无法维持值的顺序。
+-------------
| key| val|
+-------------
| A|4816|
| A|5732|
| A|5542|
| B|5814|
| B|5812|
| B|5499|
| C|5992|
| C|7299|
| C|5193|
预期的O / P
key | val
A | (4816, 5732, 5542)
B | (5814, 5812, 5499)
C | (5992, 7299, 5193)
如何在进行汇总时保持值的顺序?
答案 0 :(得分:6)
简短的回答是你不是。一般情况下,DataFrames
未订购,因此无需保留。此外,聚合需要随机播放,因此,不保证任何处理操作顺序。
在特定情况下,您可以尝试类似的内容:
import org.apache.spark.sql.functions._
df
.withColumn("id", monotonically_increasing_id)
.groupBy("key")
.agg(collect_list(struct($"id", $"val")).alias("val"))
.select($"key", sort_array($"val").getItem("val").alias("val"))
但使用它需要您自担风险,并且只有在您完全理解上游执行计划的保证时才会使用。