2017-05-10 7 views
0

dfLPという名前のRDD[LabeledPoint]を作成するコードがあります。各LabeledPointがありますDataFrameの特定の列にNULL値を代入することはできません

  1. featIndで指定dfの列のインデックスに対応するカラムtarget
  2. df
  3. データフレームの点の値。私はこのコードを実行すると

、私はエラーを取得する:

Caused by: java.lang.NullPointerException: Value at index 2 in null

は、私の知る限り理解し、それはdfのいくつかの行がDoubleにキャストできない値nullを有することを意味します。

val targetInd = df.columns.indexOf("target") 
val ignored = List("target") 
val featInd = df.columns.diff(ignored).map(df.columns.indexOf(_)) 

val dfLP = df.rdd.map(r => LabeledPoint(
    r.getDouble(targetInd), 
    Vectors.dense(featInd.map(r.getDouble(_))) 
)) 

エラーがfeatIndArray[Int]あるラインVectors.dense(featInd.map(r.getDouble(_)))を指します。この配列には、既存の列のインデックスのみが含まれます(df)。例えば、は、10の列を持つdfの場合は[1, 2, 3]です。

UPDATE:

私はいくつかnull値を持つカラム(col1)を検出します。しかし、実行した後df = df.na.fill("0",Seq("col1"))私はまだ同じエラーがあります。私がdfを印刷すると、まだnullの値が表示されます。どうして?

答えて

0

私はna.fill機能を試していないが、次は間違いなくこれはあなたのデータががNULL値を持っているという事実を隠します

val dfLP = df.rdd.map(r => { 
    LabeledPoint(Option(r.getDouble(targetInd)) getOrElse 0D, Vectors.dense(featInd.map(ind => Option(r.getDouble(ind)) getOrElse 0D))) 
}) 

Option機能を使用してnullpointerexceptionを削除します。
回答が役に立ちます

関連する問題