2016-04-17 8 views
0

Vielleicht etwas, was ich mache, die nicht ganz unterstützt wird, aber ich möchte wirklich Kotlin verwenden, wie ich Apache Funken lernen ist with this bookKotlin und Funken - SAM gibt

Hier ist die Scala Codebeispiel I zu laufen bin versucht, . Die flatMap() akzeptiert einen FlatMapFunction SAM-Typen:

val conf = new SparkConf().setAppName("wordCount") 
val sc = new SparkContext(conf) 
val input = sc.textFile(inputFile) 
val words = input.flatMap(line => line.split(" ")) 

Hier ist mein Versuch, dies in Kotlin zu tun. Aber es ist mit einer Zusammenstellung Problem in der vierten Zeile:

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 

Wenn ich den Mauszeiger über sie bekomme ich diesen Compiler-Fehler:

Bin ich etwas unvernünftig oder nicht unterstützen tun? Ich sehe nicht irgendwelche Vorschläge mit Lambda-Ausdrücke automatisch zu vervollständigen entweder :(

Antwort

3

Trotz der Tatsache, dass das Problem gelöst ist, möchte ich einige Informationen zu den Gründen für das Kompilierungsproblem geben. In diesem Beispiel hat input einen Typ von , dessen flatMap()-Methode einen Lambda akzeptiert, der TraversableOnce[U] zurückgeben sollte. Da Scala über ein eigenes Collections-Framework verfügt, können Java-Collection-Typen nicht in TraversableOnce konvertiert werden.

Darüber hinaus bin ich nicht so sicher, Scala Function s sind wirklich SAMs. Soweit ich aus den Screenshots sehen kann, bietet Kotlin nicht an, eine Function Instanz durch ein Lambda zu ersetzen.

2

Ah, dachte ich es aus. Ich wusste, dass es eine Möglichkeit gäbe, da Funken unterstützt sowohl Java und Scala. Den Schlüssel zu diesem Problem war eine JavaSparkContext statt der Scala-basierten SparkContext zu verwenden.

aus irgendeinem Grund Scala und Kotlin Sie immer mit SAM Konvertierungen nicht auszukommen. Aber Java und Kotlin tun ...

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

} 
Verwandte Themen