【发布时间】:2018-08-12 05:40:01
【问题描述】:
我是 spark 编程和 scala 的新手,我无法理解 map 和 flatMap 之间的区别。使用flatMap时,为什么方法中使用的“选项”工作正常
def parseNames(line: String) : Option[(Int,String)] = {
var fields = line.split('\"')
if (fields.length >1) {
return Some(fields(0).trim().toInt,fields(1) )
}
else {
return None
}
}
def main(args: Array[String]) {
val sc = new SparkContext("local[*]","DemoHero")
val txt= sc.textFile("../marvel-names1.txt")
val rdd = txt.flatMap(parseNames)
但没有“选项”,就会报错:
def parseNames(line: String) : (Int, String) = {
var fields = line.split('\"')
(fields(0).trim().toInt,fields(1) )
}
def main(args: Array[String]) {
val sc = new SparkContext("local[*]","DemoHero")
val txt= sc.textFile("../marvel-names1.txt")
val rdd = txt.flatMap(parseNames)
据我了解,flatmap 将 Rdd 放入 String/Int Rdd 的集合中。我在想,在这种情况下,两者都应该没有任何错误。请让我知道我在哪里犯了错误。
【问题讨论】:
-
为什么你的第二个代码 sn-p 不起作用应该很明显。为什么第一个 sn-p 有效:这是个谜,因为
Option没有扩展TraversableOnce。
标签: scala apache-spark