2015-11-20 3 views
1

У меня есть этот код в СкалеПочему mapPartitions ничего не печатает в stdout?

object SimpleApp { 

    def myf(x: Iterator[(String, Int)]): Iterator[(String, Int)] = { 
    while (x.hasNext) { 
    println(x.next) 
    } 
    x 
    } 

    def main(args: Array[String]) { 
    val conf = new SparkConf().setAppName("Simple Application") 
    val sc = new SparkContext(conf) 
    val tx1 = sc.textFile("/home/paourissi/Desktop/MyProject/data/testfile1.txt") 
    val file1 = tx1.flatMap(line => line.split(" ")).map(word => (word, 1)) 
    val s = file1.mapPartitions(x => myf(x)) 
    } 
} 

Я пытаюсь выяснить, почему он ничего на выходе не печатает. Я запускаю его на локальном компьютере, а не в кластере.

ответ

2

mapPartitions является преобразование, и, таким образом, ленивым

Если вы добавите действие в конце концов, все выражение будет оцениваться. Попробуйте добавить s.count в конце.

+0

Спасибо, ребята. – Nick

4

У вас есть только преобразования, нет actions. Искры не будут выполняться до вызова действия. Добавьте эту строку, чтобы распечатать 10 лучших результатов.

s.take(10).foreach(println) 
Смежные вопросы