问题描述
我试图了解Spark中是否有默认方法-scala在合并中包含空字符串。
Ex-我有下面的DF-
val df2=Seq(
("","1"),("null","15_20")
)toDF("c1","c2")
+----+-----+
| c1| c2|
+----+-----+
| | 1|
|null|15_20|
+----+-----+
以下代码仅适用于NULL值。但是我也要求合并也要为空字符串工作。
df2.withColumn("FirstNonNullOrBlank",coalesce(col("c1"),col("c2")))show
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| |
|null|15_20| 15_20|
+----+-----+-------------------+
预期输出-
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| 1 |
|null|15_20| 15_20|
+----+-----+-------------------+
这里最好的方法是什么?
解决方法
您需要一个辅助函数来“无效化”这些记录:
def nullify(c: Column) = when(not (c==="" or c==="null"),c)
df2
.withColumn("FirstNonNullOrBlank",coalesce(
nullify(col("c1")),nullify(col("c2")))
)
.show
+----+-----+-------------------+
| c1| c2|FirstNonNullOrBlank|
+----+-----+-------------------+
| | 1| 1|
|null|15_20| 15_20|
+----+-----+-------------------+