删除Dataframe中特定行中的Null并组合行

时间:2018-02-13 07:36:21

标签: scala apache-spark apache-spark-sql

需要使用Scala在Spark Dataframes中执行以下活动。 尝试过做一些基本的过滤器isNotNull条件和其他。但没有运气。

输入

+----------+----------+----------+
|     Amber|     Green|       Red|
+----------+----------+----------+
|      null|      null|[AE,AA,CV]|
|      null|[AH,EE,CC]|      null|
|[DD,DE,QQ]|      null|      null|
+----------+----------+----------+

输出

+----------+----------+----------+
|     Amber|     Green|       Red|
+----------+----------+----------+
|[DD,DE,QQ]|[AH,EE,CC]|[AE,AA,CV]|
+----------+----------+----------+

1 个答案:

答案 0 :(得分:0)

如果输入 dataframe 仅限于

+----------+----------+----------+
|     Amber|     Green|       Red|
+----------+----------+----------+
|      null|      null|[AE,AA,CV]|
|      null|[AH,EE,CC]|      null|
|[DD,DE,QQ]|      null|      null|
+----------+----------+----------+

然后执行以下操作应该可以获得所需的最终数据框

import org.apache.spark.sql.functions._
df.select(collect_list("Amber")(0).as("Amber"), collect_list("Green")(0).as("Green"), collect_list("Red")(0).as("Red")).show(false)

你应该得到

+------------+------------+------------+
|Amber       |Green       |Red         |
+------------+------------+------------+
|[DD, DE, QQ]|[AH, EE, CC]|[AE, AA, CV]|
+------------+------------+------------+

collect_list 内置函数会忽略null值。