Java中如何过滤DataFrame特定列至少有一个非空值的行
Spark DataFrame过滤至少一个非空行(Java环境)
原始DataFrame结构如下:
| NAME | COLUMN_1 | COLUMN_2 |
|---|---|---|
| name_1 | null | some_value |
| name_2 | some_value | null |
| name_3 | null | null |
需求是过滤掉COLUMN_1和COLUMN_2均为null的行,保留至少有一个非空值的行,最终得到如下结果:
| NAME | COLUMN_1 | COLUMN_2 |
|---|---|---|
| name_1 | null | some_value |
| name_2 | some_value | null |
你之前的代码错误在于使用了and逻辑,这会要求COLUMN_1和COLUMN_2同时非空,而原始数据中没有满足该条件的行,所以所有行都被过滤掉了。
正确实现方式
方式一:使用or逻辑判断至少一个非空
直接判断COLUMN_1非空 或者 COLUMN_2非空,完全匹配需求:
import org.apache.spark.sql.functions; import static org.apache.spark.sql.functions.col; Column filter = col("COLUMN_1").isNotNull().or(col("COLUMN_2").isNotNull()); df.filter(filter).show();
方式二:取反"两个都为空"的判断
先判断COLUMN_1和COLUMN_2同时为空,再对这个条件取反,同样能达到过滤效果:
import org.apache.spark.sql.functions; import static org.apache.spark.sql.functions.col; Column filter = col("COLUMN_1").isNull().and(col("COLUMN_2").isNull()).not(); df.filter(filter).show();
以上两种方式都能正确保留name_1和name_2的行,过滤掉name_3的行。
内容的提问来源于stack exchange,提问作者jimboslive
相关产品推荐
相关产品推荐

