2016-04-09 72 views
0

如果我有個標準差我該如何刪除這些列或避免處理他們或SE它在建立模型(以半自動化的方式)與星火下降colums 0或NaN

所以例如DF我想

  1. 有許多缺失值,空值或NaN查找列
  2. 找到相關性較低(例如皮爾森)列與依賴VAR
  3. 刪除所有列(1),並從十個最低(2)
+0

相關 https://spark.apache.org/docs/latest/ml-features.html – oluies

+1

你能解釋一下自己嗎?你的問題有點含糊 –

+1

(1)你可以使用DataFrameNAFunctions:http://spark.apache.org/docs/latest/api/scala/#org.apache.spark.sql.DataFrameNaFunctions,例如df.na. drop() – eliasah

回答

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動態構建查詢。如果你不想檢查每一列,你可以重寫它以硬編碼值 - 但這應該足以讓你去。

+0

也許使用df.stat.freqItems代替? – oluies

+0

這並不能真正讓他得到他想要的,是嗎? –