2016-05-19 3 views
1

Als ich die ersten N Datensätze in Apache wollen Funken nur nehmen ich benutze:Warum liest env.readTextFile (...). First (10) .print in Flink alle Daten?

sc.textFile(path_to_files).take(10) 

die sich schnell zurück und geben Sie mir die ersten 10 Zeilen Text. Wenn ich etwas ähnliches in Apache Flink:

env.readTextFile(path_to_files).first(10).print() 

Es werden alle Dateien vollständig lesen, bevor die Ergebnisse zurück. Warum das?

Antwort

3

Flink verwendet ein (strombasiertes) Pipeline-Ausführungsmodell. Daher beginnt die Quelle beim Starten des Programms nur damit, Daten zu verbrauchen, ohne über nachgeschaltete Operatoren zu wissen. Daher werden alle Daten gelesen und first(10) geben nur 10 Datensätze zurück.

Aufgrund des Pipeline-Ausführungsmodells ist es schwierig, eine Optimierung anzuwenden, um die Quelle frühzeitig zu stoppen. Stellen Sie sich vor, dass es Filter, Aggregate usw. dazwischen geben könnte, sodass die Quelle nicht wissen kann, wie viele Daten sie lesen muss, um mit 10 Endergebnissätzen zu enden.

+0

Danke, das macht Sinn. – gvd