检查是否有任何Dataframe列为空

lh80um4z  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(319)

我需要检查dataframe的任何列是否为空。empty可以定义为列的所有行的值都是null或空字符串
Dataframe如下

+---+-------+-------+-------+-------+
| 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|
+---+-------+-------+-------+-------+

另外,我的最终结果应该是 true 或者 false 如果任何列为空,则启用。在这种情况下 true 因为数 Sample4 是0

iq0todco

iq0todco1#

您可以将正确的值Map到1,将空字符串/空值Map到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|
+---+-------+-------+-------+-------+

相关问题