Dataframe Spark Scala中的最后一个聚合函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dataframe Spark Scala中的最后一个聚合函数相关的知识,希望对你有一定的参考价值。

[我有一个数据框,我聚集在一个列上并选择最后一个元素,但是每次都会返回不同的结果,有没有办法我可以解决这个问题,而每次都没有diff结果并获得正确的结果。

val sourceDF = Seq(
 (11,"a1", "a2"),
 (11,"b1", "b2"),
 (22,"c1", "c2"),
 (22,"d1", "d2"),
 (33,"e1", "e2")
).toDF("id","name", "city")

sourceDF.show(false)

sourceDF.groupBy("id").agg(
last("name"),
last("city")
).show(false)

+---+-----------------+-----------------+                                       
|id |last(name, false)|last(city, false)|
+---+-----------------+-----------------+
|33 |e1               |e2               |
|11 |a1               |a2               |
|22 |c1               |c2               |
+---+-----------------+-----------------+

提前感谢。

答案

如果您的数据集很大,那么可能会出现问题,请尝试为您的分组列指定顺序:

sourceDF.orderBy("id").groupBy("id").agg(
last("name"),
last("city")
).show(false)

以上是关于Dataframe Spark Scala中的最后一个聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

Spark/Scala:对带有数组类型列的 DataFrame 中的某些组件的操作

合并spark scala Dataframe中的行

如何从 Scala 中的 DataFrame 在 Spark 中创建分布式稀疏矩阵

使用 Scala 将列分配给 Spark Dataframe 中的另一列

基于Spark Scala中的条件转置Dataframe中的特定列和行

使用Scala在Spark中创建DataFrame时出错