2017-01-31 4 views
2

мне нужно что-то похожее на функцию randomSplit:Split Спарк DataFrame основан на состоянии

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

Однако мне нужно разделить myDataFrame на основе булева состояния. Имеются ли что-нибудь вроде следующего?

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

Я хотел был бы не делать два отдельных .filter звонки.

+0

точно такая же проблема. Трудно поверить, что вам нужно сделать два фильтра, вместо того, чтобы делать одно сканирование. – medloh

ответ

2

К сожалению DataFrame API не имеет такой способ, чтобы разделить условием вам придется выполнить два отдельных filter преобразования:

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

Я знаю о значении кеша/сохраняюсь в искре. Предположим, что 2-3 искровых задания работают параллельно, но в разных искровых сеансах на одном и том же искровом классе/коде, общем для всех заданий. У меня есть кешированный/сохраняемый блок данных искры в коде. Мой вопрос: 1. Каковы данные, кэшированные по заданию-1, используемые заданием-2, заданием-3 из-за параллельного выполнения и наоборот. 2. Происходит ли какая-либо несогласованность данных из-за кэшированных данных, используемых другим заданием. 3. Есть ли вероятность конфликта между заданиями на кэшированной работе. – Hemant