如何使用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)所以一次检查一个是不可能的。
一些可能有帮助的要点:
- 数据的架构包含 bigint、int、String 和日期格式。
- 使用的表都是hive表。
- 我也有 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|
+---+----+---+
我正在使用 Spark shell 1.6。我想执行检查以将所有包含空值的行与一次不包含空值的行分开。更准确地说,我必须将它们分成 2 个不同的表(数据和错误)。问题是我有太多的列(42)所以一次检查一个是不可能的。 一些可能有帮助的要点:
- 数据的架构包含 bigint、int、String 和日期格式。
- 使用的表都是hive表。
- 我也有 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|
+---+----+---+