2017-01-31 5 views
2

Ich brauche etwas ähnliches wie die randomSplit Funktion:Split Spark-Datenrahmen basierend auf Zustand

val Array(df1, df2) = myDataFrame.randomSplit(Array(0.6, 0.4)) 

Ich brauche aber myDataFrame basierte auf einem boolean Zustand zu spalten. Gibt es etwas wie das Folgende?

val Array(df1, df2) = myDataFrame.booleanSplit(col("myColumn") > 100) 

Ich möchte nicht zwei separate .filter Anrufe zu tun.

+0

genau das gleiche Problem. Kaum zu glauben, dass Sie zwei Filteroperationen durchführen müssen, anstatt nur einen Scan zu machen. – medloh

Antwort

2

Leider ist das Dataframe API nicht, ein solches Verfahren haben, von einem Zustand zu spalten werden Sie zwei separate filter Transformationen ausführen müssen:

myDataFrame.cache() // recommended to prevent repeating the calculation 

val condition = col("myColumn") > 100 
val df1 = myDataFrame.filter(condition) 
val df2 = myDataFrame.filter(not(condition)) 
+0

Ich bin mir über die Bedeutung von Cache/Persist in Spark bewusst. Angenommen, 2-3 Funkenjobs laufen parallel, aber in einer anderen Spark-Sitzung mit der gleichen Spark-Klasse/Code, die für alle Jobs gilt. Ich habe Spark-Datenrahmen im Code zwischengespeichert. Meine Frage ist 1. Ob die Daten von Job-1 zwischen Job-2, Job-3 von paralleler Ausführung und umgekehrt zwischengespeichert wurden. 2. Kommt es aufgrund von zwischengespeicherten Daten, die von anderen Jobs verwendet werden, zu Dateninkonsistenz? 3. Besteht die Gefahr von Konflikten zwischen Jobs im Cache-Job? – Hemant

Verwandte Themen