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