【发布时间】:2017-03-09 21:42:47
【问题描述】:
val df = sc.parallelize(Seq((a, 1), (a, null), (b, null)(b, 2),(b, 3),(c, 2),(c, 4),(c, 3))).toDF("col1","col2")
输出应该如下所示。
col1 col2
a null
b null
c 4
我知道 col1 上的 groupBy 并获得 col2 的最大值。我可以使用df.groupBy("col1").agg("col2"->"max")
但我的要求是如果有 null 我想选择该记录,但如果没有 null 我想选择 col2 的最大值。
我该怎么做,请帮助我。
【问题讨论】:
-
尝试使用这个
import org.apache.spark.sql.functions._df.groupBy("col1").agg(collect_as_list("col2"))现在你在 col2 上有列表试试你的逻辑,比如 if list.contains(null) return null else max from list -
你真的应该重新考虑问题的前提。没有必要在你的 RDD 中有一堆
null。 -
大家好,感谢您的回复。我已经通过以下方式做到了这一点。我首先通过将空值更新为该列的字符串“99-99-9999”来修改数据框。然后我按其他列和 agg -->max 对我更新的列进行了分组。这样我的要求就满足了。非常感谢所有回复的人。
-
@Ramesh :如果您发布答案并接受它会很好。因此,如果其他人正在寻找类似的答案,这将是有帮助的。
标签: scala apache-spark apache-spark-sql