如何使用sparkshell一次性从表的所有列中过滤出所有空值?

b0zn9rqh  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(427)

我用的是Spark壳1.6。我想执行一个检查,将所有包含空值的行与不包含空值的行分开。更确切地说,我必须将它们分为两个不同的表(数据和错误)。问题是我有太多的列(42),所以一次检查一列是不可能的。以下几点可能会有所帮助:
数据的模式包含bigint、int、string和date格式。
使用的表都是配置单元表。
我也有csv的数据(但使用sparkshell是必须的)。

bnlyeluc

bnlyeluc1#

scala> val data = Seq(("1","one",null),(null,"2","null"),("3",null,null),(null,null,null),("4","four","IV")).toDF
scala> data.show
+----+----+----+
|  _1|  _2|  _3|
+----+----+----+
|   1| one|null|
|null|   2|null|
|   3|null|null|
|null|null|null|
|   4|four|  IV|
+----+----+----+
scala> val error = data.filter(x=>x.anyNull)
scala> error.show
+----+----+----+
|  _1|  _2|  _3|
+----+----+----+
|   1| one|null|
|null|   2|null|
|   3|null|null|
|null|null|null|
+----+----+----+
scala> val correct_data =data.except(error)
scala> correct_data.show
+---+----+---+
| _1|  _2| _3|
+---+----+---+
|  4|four| IV|
+---+----+---+

相关问题