rdd上的标量图错误java.lang.NullPointerException

问题描述 投票:0回答:1

[当我尝试映射从HDFS读取的rdds时出现奇怪的错误,这是我的代码(简体)。

我试图将RDD放入scala映射,然后选择某些键值来写入HDFS。我在下面运行了这段代码,但是每次运行到“ rdd上的地图”进程(我在下面发表了评论),我都遇到了NPE错误,这真是太奇怪了!

我无法解决此问题。我已经用笨拙的方式重写了代码以使其正常工作,但我仍然想知道为什么“ rdd映射”很重要!!!>

BTW:我使用的所有键都存在于scala映射中,并且没有空值。我删除了“ rdd上的映射”过程,并将键值写入字符串以使我的代码以另一种方式工作,但只是想知道为什么会发生这种奇怪的问题... [T_T

val featureRdd = hdfsRDD
  .flatMap { item =>
    val result = new ArrayBuffer[String]()
    val itemInfo = collection.mutable.Map[String, String]()

    // x below is a string tuple: (s1, s2, s3)
    item._2.asScala.foreach(x => {
      itemInfo.put(x._2, x._3)
    })

    val f1 = itemInfo.getOrElse("f1", "")
    val f2 = itemInfo.getOrElse("f2", "")
    if (f1.equals("true") && f2.nonEmpty) {
      val c1 = itemInfo.getOrElse("c1", "0")
      val c2 = itemInfo.getOrElse("c2", "0")

      val featureInfo = collection.mutable.Map[String, String]()
      featureInfo.put("c1", c1)
      featureInfo.put("c2", c2)

      // Every time I add this map code, I will get NPE ERROR
      // And I'm sure this is no null values because I filter all null values ahead of time
      featureInfo.map(item => {
        val featureName = item._1
        val featureValue = item._2
        result += List(featureName, featureValue).mkString(",")
      })
      result
    } else {
      null
    }
  }.filter(_!=null)
    

当我尝试映射从HDFS读取的rdds时,出现了一个奇怪的错误,这是我的代码(简体)。我试图将RDD放入scala映射,然后选择某些键值来写入HDFS。我跑了一块...

java scala apache-spark rdd
1个回答
0
投票

这显然是由于在null中返回了flatMapRDD.flatMap遵从Iterator.flatMap,并检查此内容:

© www.soinside.com 2019 - 2024. All rights reserved.