使用vararg对列进行Spark数据帧大小检查无法正常工作,否则-Scala

问题描述 投票:0回答:1

我不想在数据帧中的所有列上都使用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))返回正确的长度,如果我退还。

我想知道这是什么愚蠢的问题。一定是我明显忽略的东西!

dataframe apache-spark if-statement size
1个回答
1
投票
val resDF2 = aggDF.select(cols.map { col => ( when(size(aggDF(col)) === 0,lit(null)).otherwise(aggDF(col))).as(s"$col") }: _*)

这可以进一步简化,因为没有whenotherwise自动返回null(即otherwise(lit(null))是默认值:]]]

val resDF2 = aggDF.select(cols.map { col => when(size(aggDF(col)) > 0,aggDF(col)).as(s"$col") }: _*)

另请参阅https://stackoverflow.com/a/48074218/1138523

© www.soinside.com 2019 - 2024. All rights reserved.