Spark drop colums 0或NaN

时间:2016-04-09 23:06:30

标签: apache-spark

如果我有DF标准偏差,我该如何删除这些列或避免处理它们或将其置于模型构建中(以半自动方式)

所以例如我想

  1. 查找包含许多缺失值,空值或NaN
  2. 的列
  3. 使用依赖var
  4. 查找具有低相关性的列(例如pearson)
  5. 删除(1)中的所有列和(2)
  6. 中的最低列

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的方法来删除其中包含null值的列:

val df = Seq(
  (Option(1),Option(11),None), (Option(2), None, Option(222))
).toDF("col1", "col2", "col3")

// +----+----+----+
// |col1|col2|col3|
// +----+----+----+
// |   1|  11|null|
// |   2|null| 222|
// +----+----+----+

val nullCount = udf[Int,Any](any => if (any == null) 1 else 0)

val columnNullCounts = df.select(
  df.columns.map(c => nullCount(col(c)) as c):_*
).agg(
  sum(df.columns(0)) as df.columns(0),
  df.columns.slice(1, df.columns.length).map(c => sum(c) as c):_*
).collect.apply(0).toSeq.toArray

df.select(df.columns.zip(columnNullCounts).filter(v => v._2 == 0).map(c => col(c._1)):_*)

// +----+
// |col1|
// +----+
// |   1|
// |   2|
// +----+

请注意,上述代码中的所有主要复杂性都是因为我将其设为通用的DataFrame。它使用DataFrame.columns动态构建其查询。如果您不想检查每一列,您可以将其重写为硬代码值 - 但这应该足以让您继续。