Apache spark GroupBy dataframe列,不带聚合并设置非空值

Apache spark GroupBy dataframe列,不带聚合并设置非空值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个数据框,它有如下记录: +---+----+----+ |id |L1 |L2 | +---+----+----+ |101|202 |null| |101|null|303 | +---+----+----+ 在Spark SQL中,这是一种简单的groupBy方法,可以获得如下结果: +---+----+----+ |id |L1 |L2 | +---+----+----+ |101|202 |303 | +---+----+----+ 谢谢。使用max或min聚合数据。

我有一个数据框,它有如下记录:

+---+----+----+
|id |L1  |L2  |
+---+----+----+
|101|202 |null|
|101|null|303 |
+---+----+----+
在Spark SQL中,这是一种简单的groupBy方法,可以获得如下结果:

+---+----+----+
|id |L1  |L2  |
+---+----+----+
|101|202 |303 |
+---+----+----+

谢谢。

使用
max
min
聚合数据。由于您只有一个有效值,因此将选择此值。请注意,此处不可能使用
first
(速度更快),因为这仍然会返回空值

当列为数字类型时,可按如下方式进行求解:

df.groupBy(“id”).agg(max($“L1”).as(“L1”)、max($“L2”).as(“L2”))
但是,如果要处理字符串,则需要将所有值收集为一个列表(或集合),然后使用
coalesce

df.groupBy(“id”)
.agg(coalesce(collect_list($“L1”)).as(“L1”)、coalesce(collect_list($“L2”)).as(“L2”))

当然,这假设空值不是字符串,而是实际的空值

L1和L2应该是集合还是。。如果除了“null”之外还有另一个id相同的值呢?您在编码部分的努力是什么?您失败了,需要帮助吗?我尝试了这个,但得到的都是null。我认为这些值是字符串而不是整数,所以max函数在这里不起作用。@AB:我明白了,我在答案中添加了一个适用于字符串的替代方法。