无法替换DataFrame的特定列中的空值

时间:2017-05-10 18:21:49

标签: scala apache-spark

我有代码创建名为RDD[LabeledPoint]的{​​{1}}。每个dfLP都有:

  1. DataFrame LabeledPoint
  2. 的列target的值
  3. df中指定的df列的索引相对应的点。
  4. 当我执行此代码时,我收到错误:

      

    引起: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值。为什么呢?

1 个答案:

答案 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)))
})

这将隐藏您的数据具有空值的事实。
希望答案有所帮助