如何使用Spark-shell一次从table的所有列中过滤掉所有空值?

How to filter out all null values from all the columns of a table in one go using Spark-shell?

我正在使用 Spark shell 1.6。我想执行检查以将所有包含空值的行与一次不包含空值的行分开。更准确地说,我必须将它们分成 2 个不同的表(数据和错误)。问题是我有太多的列(42)所以一次检查一个是不可能的。 一些可能有帮助的要点:

  1. 数据的架构包含 bigint、int、String 和日期格式。
  2. 使用的表都是hive表。
  3. 我也有 CSV 数据(但必须使用 spark shell)。
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|
+---+----+---+