【问题标题】:How can I filter spark Dataframe according to the value that column contains?如何根据列包含的值过滤火花数据框?
【发布时间】:2019-06-07 13:31:34
【问题描述】:

在数据集中,我有一些字符串列的 None 或 NA 值,我想计算数据集中包含多少个这些 null 值?根据该决定使用哪种方法来处理缺失值。

我尝试了一种非常有效的方法,用 or 表达式过滤每一列的数据框。我想以更有效和更整洁的方式过滤它们。最好不转成rdd做,但是如果不能用dataframe做这种过滤rdd的方式也是可以接受的。

我发现这个帖子 Spark SQL filter multiple fields 与我的问题非常相似,但我想要一种更简洁优雅的方式来写这个,因为我有很多专栏

// trainDataFull is my dataframe
val nullValues = Array("NA", "None")

val filtered = trainDataFull.filter(trainDataFull("Alley").isin(nullValues:_*) ||
      trainDataFull("MSZoning").isin(nullValues:_*) ||
      trainDataFull("Street").isin(nullValues:_*) ||
      trainDataFull("LotShape").isin(nullValues:_*) ||
      trainDataFull("LandContour").isin(nullValues:_*) ||
      trainDataFull("Utilities").isin(nullValues:_*) ||
      trainDataFull("LotConfig").isin(nullValues:_*) ||
      trainDataFull("LandSlope").isin(nullValues:_*) ||
      trainDataFull("Neighborhood").isin(nullValues:_*) ||
      trainDataFull("Condition1").isin(nullValues:_*) ||
      trainDataFull("Condition2").isin(nullValues:_*) ||
      trainDataFull("BldgType").isin(nullValues:_*) ||
      trainDataFull("HouseStyle").isin(nullValues:_*) ||
      trainDataFull("RoofStyle").isin(nullValues:_*) ||
      trainDataFull("RoofMatl").isin(nullValues:_*) ||
      trainDataFull("Exterior1st").isin(nullValues:_*) ||
      trainDataFull("Exterior2nd").isin(nullValues:_*) ||
      trainDataFull("MasVnrType").isin(nullValues:_*) ||
      trainDataFull("MasVnrArea").isin(nullValues:_*) ||
      trainDataFull("ExterQual").isin(nullValues:_*) ||
      trainDataFull("MasVnrArea").isin(nullValues:_*) ||
      trainDataFull("ExterQual").isin(nullValues:_*) ||
      trainDataFull("ExterCond").isin(nullValues:_*) ||
      trainDataFull("Foundation").isin(nullValues:_*) ||
      trainDataFull("BsmtQual").isin(nullValues:_*) ||
      trainDataFull("BsmtCond").isin(nullValues:_*) ||
      trainDataFull("BsmtExposure").isin(nullValues:_*)
    )

我想看看哪一列有多少个空值。

【问题讨论】:

    标签: scala apache-spark machine-learning apache-spark-sql feature-engineering


    【解决方案1】:

    您始终可以通过编程方式生成查询

    val nullValues = Array("NA", "None")
    val df = Seq(("NA", "Foo"), ("None", "NA")).toDF("MSZoning", "Street")
    val columns = df.schema.collect {
      case StructField(name, StringType, _, _) =>
        sum(when(col(name).isInCollection(nullValues), 1)).as(name)
    }
    df.select(columns:_*).show()
    

    输出:

    +--------+------+
    |MSZoning|Street|
    +--------+------+
    |       2|     1|
    +--------+------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多