我不想在数据帧中的所有列上都使用foldLeft或withColumn,但希望根据https://medium.com/@manuzhang/the-hidden-cost-of-spark-withcolumn-8ffea517c015进行选择,并使用if else语句修饰并使用vararg cols。我只想使用Scala替换Spark数据框中的一个空数组列。我正在使用大小,但从未正确计算零(0)。
val resDF2 = aggDF.select(cols.map { col => ( if (size(aggDF(col)) == 0) lit(null) else aggDF(col) ).as(s"$col") }: _*)
if(size(aggDF(col))== 0)lit(null)在此处无法正常工作,但可以运行,并且size(aggDF(col))返回正确的长度,如果我退还。
我想知道这是什么愚蠢的问题。一定是我明显忽略的东西!
val resDF2 = aggDF.select(cols.map { col => ( when(size(aggDF(col)) === 0,lit(null)).otherwise(aggDF(col))).as(s"$col") }: _*)
这可以进一步简化,因为没有when
的otherwise
自动返回null
(即otherwise(lit(null))
是默认值:]]]
val resDF2 = aggDF.select(cols.map { col => when(size(aggDF(col)) > 0,aggDF(col)).as(s"$col") }: _*)