从Spark示例(https://spark.apache.org/examples.html),代码如下:
val file = spark.textFile("hdfs://...")
val counts = file.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
编译时可以正常工作。 但是,如果我在Spark REPL上尝试这个确切的代码:
scala> val lines = "abc def"
lines: String = abc def
scala> val words = lines.flatMap(_.split(" "))
<console>:12: error: **value split is not a member of Char**
val words = lines.flatMap(_.split(" "))
^
是什么?
感谢 马特
答案 0 :(得分:2)
file
可能是Iterator[String]
或类似的东西。在您的代码中,lines
只是String
。没有迭代器。这意味着当您平面映射String
时,您将String
视为集合,因此每个元素都是Char
。并且Char
没有split
作为方法(没有意义)。
如果你突破了一点..
val words = lines.flatMap(x => x.split(" "))
^ this is a Char
你可以拆分字符串本身。
val words = lines.split(" ")
答案 1 :(得分:1)
lines
只是一个字符串。所以flatmap
正在对一系列字符进行运行。您需要使用RDD
val rddYouCanUse = sc.parallelize(List("abc def"))