我有代码创建名为RDD[LabeledPoint]
的{{1}}。每个dfLP
都有:
LabeledPoint
target
的值
df
中指定的df
列的索引相对应的点。 当我执行此代码时,我收到错误:
引起:java.lang.NullPointerException:索引2处的值为null
据我了解,这意味着某些featInd
行的值df
无法转换为null
。
Double
错误是指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(_)))
))
行,其中Vectors.dense(featInd.map(r.getDouble(_)))
是featInd
。此数组仅包含Array[Int]
的现有列的索引。例如df
[1, 2, 3]
df
列{。}}。
更新
我检测到具有10
个值的列(col1
)。但是在执行null
后,我仍然有同样的错误。当我打印df = df.na.fill("0",Seq("col1"))
时,我仍然会看到df
值。为什么呢?
答案 0 :(得分:0)
我还没有尝试na.fill
功能,但以下内容肯定会使用nullpointerexception
功能删除Option
val dfLP = df.rdd.map(r => {
LabeledPoint(Option(r.getDouble(targetInd)) getOrElse 0D, Vectors.dense(featInd.map(ind => Option(r.getDouble(ind)) getOrElse 0D)))
})
这将隐藏您的数据具有空值的事实。
希望答案有所帮助