在 Scala/Spark 中并行执行多个 OR 操作


def notNullCheck(df:DataFrame,columns:Column*) {
df.filter(df(columns(0).isNotNull) || df(columns(1).isNotNull))
}

如果我有 20 列,如何概括上述方法,我想避免写 20 次相同的条件。

谢谢

假设列的类型为List[Column]

val columns = List(col("a"), col("b"))

你可以做

val conditions = columns.foldLeft(lit(true))((z,c) => z.isNotNull || c.isNotNull)

它的背后将是这样的:

org.apache.spark.sql.Column = ((((true IS NOT NULL) OR (a IS NOT NULL)) IS NOT NULL) OR (b IS NOT NULL))

您可以使用na.drop

def notNullCheck(df: DataFrame, columns: Column*) {
df.na.drop(how="all", cols=columns)
}

这将转化为同样的事情,而没有任何ORs

最新更新