Kotlin和Spark – SAM问题
也许我正在做一些不太受支持的事情,但是我真的很想在本书学习Apache Spark的时候使用Kotlin
这里是我试图运行的Scala代码示例。 flatMap()
接受一个FlatMapFunction SAM类型:
val conf = new SparkConf().setAppName("wordCount") val sc = new SparkContext(conf) val input = sc.textFile(inputFile) val words = input.flatMap(line => line.split(" "))
这是我在Kotlin做这个的尝试。 但第四行有一个汇编问题:
val conf = SparkConf().setMaster("local").setAppName("Line Counter") val sc = SparkContext(conf) val input = sc.textFile("C:\\spark_workspace\\myfile.txt",1) val words = input.flatMap{ s:String -> s.split(" ") } //ERROR
当我把鼠标悬停在它上面,我得到这个编译错误:
我做什么不合理或不受支持? 我没有看到任何建议与lambdas自动完成或者:(
尽管问题已经解决,但我想提供一些关于编译问题的原因的信息。 在这个例子中, input
有一个RDD
类型,其flatMap()
方法接受一个应该返回TraversableOnce[U]
的lambda表达式。 由于Scala拥有自己的集合框架,因此Java集合类型不能转换为TraversableOnce
。
而且,我不太确定Scala Function
是否真的是SAM。 据我可以看到从截图Kotlin不提供一个lambda Function
实例取代。
啊,我明白了。 自从Spark支持Java和Scala以来,我知道有一种方法。 这个问题的关键是使用JavaSparkContext
而不是基于Scala的SparkContext
。
出于某种原因,Scala和Kotlin并不总是与SAM转换相处。 但Java和Kotlin做…
fun main(args: Array<String>) { val conf = SparkConf().setMaster("local").setAppName("Line Counter") val sc = JavaSparkContext(conf) val input = sc.textFile("C:\\spark_workspace\\myfile.txt",1) val words = input.flatMap { it.split(" ") } }