Apache spark 如何使用Spark shell一次性从表的所有列中筛选出所有空值?

Apache spark 如何使用Spark shell一次性从表的所有列中筛选出所有空值?,apache-spark,hive,spark-shell,Apache Spark,Hive,Spark Shell,我正在使用Spark shell 1.6。我想执行一个检查,将所有包含空值的行与不包含空值的行分开。更准确地说,我必须将它们分为两个不同的表(数据和错误)。问题是我有太多的专栏(42),所以一次检查一个是不可能的。 以下几点可能会有所帮助: 数据的模式包含bigint、int、String和date格式 使用的表都是配置单元表 我也有CSV的数据(但使用火花壳是必须的) 如果你想得到答案,我建议你在帖子中添加一些数据,因为这会让每个人都更容易解决你的问题。 scala> val data

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

  • 数据的模式包含bigint、int、String和date格式
  • 使用的表都是配置单元表
  • 我也有CSV的数据(但使用火花壳是必须的)

  • 如果你想得到答案,我建议你在帖子中添加一些数据,因为这会让每个人都更容易解决你的问题。
    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|
    +---+----+---+