如果我有DF
标准偏差,我该如何删除这些列或避免处理它们或将其置于模型构建中(以半自动方式)
所以例如我想
答案 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
动态构建其查询。如果您不想检查每一列,您可以将其重写为硬代码值 - 但这应该足以让您继续。