检查是否有任何数据帧列为空



我需要检查数据帧的任何列是否为空。空可以定义为列的所有行都具有空值或空字符串值

数据帧如下所示

+---+-------+-------+-------+-------+
| ID|Sample1|Sample2|Sample3|Sample4|
+---+-------+-------+-------+-------+
|  1|     a1|     b1|     c1|   null|
|  2|       |       |       |       |
|  3|     a3|       |       |       |
+---+-------+-------+-------+-------+

我用于检查的代码

mainDF.select(mainDF.columns.map(c => sum((col(c).isNotNull && col(c)!="").cast("int")).alias(c)): _*).show()

我得到的是

+---+-------+-------+-------+-------+
| ID|Sample1|Sample2|Sample3|Sample4|
+---+-------+-------+-------+-------+
|  3|      3|      3|      3|      2|
+---+-------+-------+-------+-------+

我希望得到的是

+---+-------+-------+-------+-------+
| ID|Sample1|Sample2|Sample3|Sample4|
+---+-------+-------+-------+-------+
|  3|      2|      1|      1|      0|
+---+-------+-------+-------+-------+

此外,如果任何列为空,我的最终结果应该是truefalse。 在这种情况下,它将true,因为Sample4计数为 0

您可以将正确的值映射到 1,将空字符串/null 映射到 0,然后执行sum

mainDF.select(mainDF.columns.map(c => sum(when(col(c)==="" or col(c).isNull,0).otherwise(1)).as(c)):_*).show()
+---+-------+-------+-------+-------+
| ID|Sample1|Sample2|Sample3|Sample4|
+---+-------+-------+-------+-------+
|  3|      2|      1|      1|      0|
+---+-------+-------+-------+-------+

相关内容

最新更新