也许我正在做一些不太受支持的事情,但我真的想用Kotlin来学习Apache Spark with this book
这是我正在尝试运行的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自动完成的建议:(
答案 0 :(得分:3)
尽管问题已解决,但我想提供一些有关编译问题原因的信息。在此示例中,input
的类型为RDD
,其flatMap()
方法接受应返回TraversableOnce[U]
的lambda。由于Scala拥有自己的集合框架,因此Java集合类型无法转换为TraversableOnce
。
此外,我不太确定Scala Function
是真正的SAM。据我所见,Kotlin并没有提供用lambda替换Function
个实例。
答案 1 :(得分:2)
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(" ") }
}