[当我尝试映射从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。我跑了一块...
这显然是由于在null
中返回了flatMap
。 RDD.flatMap
遵从Iterator.flatMap
,并检查此内容: