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(" ") } }