【发布时间】:2023-03-26 20:14:01
【问题描述】:
我在这里想要的是如果特定列中的值为空字符串,则将其替换为 null。
原因是我使用org.apache.spark.sql.functions.coalesce 来填充基于另一列的Dataframe 列之一,但我注意到在某些行中值是empty String 而不是null 所以coalesce 函数没有'没有按预期工作。
val myCoalesceColumnorder: Seq[String] = Seq("xx", "yy", "zz"),
val resolvedDf = df.select(
df("a"),
df("b"),
lower(org.apache.spark.sql.functions.coalesce(myCoalesceColumnorder.map(x => adjust(x)): _*)).as("resolved_id")
)
在上面的例子中,我希望首先用列xx 填充resolved_id,如果它不为空,如果它为空,则用列yy 等等。但由于有时列 xx 填充了 "" 而不是 null 我在“resolved_id”中得到 ""。
我尝试用
修复它resolvedDf.na.replace("resolved_id", Map("" -> null))
但根据na.replace 文档,它仅在键和值都为Bolean 或String 或Double 时才有效,所以我不能在这里使用null。
由于性能问题我不想使用UDF,我只想知道有没有其他技巧可以解决这个问题?
我可以解决此问题的另一种方法是使用when,但不确定性能
resolvedDf
.withColumn("resolved_id", when(col("resolved_id").equalTo(""), null).otherwise(col("resolved_id")))
【问题讨论】:
标签: scala apache-spark apache-spark-sql