Spark без перенаправления данных после того, как он был сохранен из-за случайного перемешивания - PullRequest
0 голосов
/ 15 ноября 2018

Допустим, у нас есть следующий сценарий:

val df: DataFrame = dataframe
val df2 = df.partition(col("id").cache
...
some transformations/joins by "id" resulting `val dfTransformed`
...
val df3 = dfTransformed.groupBy("name").agg(<someaggregations>)
val df4 = df3.partition(col("id").cache
...
some transformations/joins by "id"...
...

Мой вопрос: нужно ли мне в какое-то время отключать df2? Или когда я сохраняю df4, он автоматически перезаписывает df2?

Если мне нужно unpersist df2, то когда его отменять?

Если я это сделаю:

val df3 = df2.groupBy("name").agg(<someaggregations>)
df2.unpersist
val df4 = df3.partition(col("id").cache

Не потеряю ли я производительность из-за удаления данных из памяти?

Если я это сделаю:

val df3 = df2.groupBy("name").agg(<someaggregations>)
val df4 = df3.partition(col("id").cache
df2.unpersist

Неужели я не опротестую df4 на самом деле?

1 Ответ

0 голосов
/ 15 ноября 2018

Или когда я сохраняю df4, он автоматически перезаписывает df2?

Spark не перезаписывает df2, потому что у вас может быть другая ветвь вычисления DAG, запущенная из df2, что-то вроде

val df4 = df3.partition(col("id").cache
val df2_1 = df2.groupBy("another_name")

Не потеряю ли я производительность из-за удаления данных из памяти?

В общем, да.Главное, что вам нужно знать, это то, что Spark выполняет ленивые казни.Так что на сцене

val df3 = f2.groupBy("name").agg(<someaggregations>)

на самом деле ничего не происходит.Посмотрите на официальное руководство по трансформациям и действиям Spark.

Неужели я на самом деле не опровергаю df4?

Нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...