Что лучше, создание отдельного Dataframe или ссылка на dataframe с тем же именем - PullRequest
0 голосов
/ 22 апреля 2019

Добрый день.

Я новичок в свечах. Я надеялся получить предложение о том, что лучше 1. Создание нового кадра данных каждый раз, когда выполняется новое преобразование 2. Использование того же имени, что и у предыдущего имени информационного кадра после преобразования

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

Вариант 1:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")
df1=df.filter(col('country')=='India')
df2=df1.groupBy("State").agg(max("GDP"), sum("expense"))

Вариант 2:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")
df=df.filter(col('country')=='India')
df=df.groupBy("State").agg(max("GDP"), sum("expense"))

Требует ли вариант 2 меньше памяти, поскольку на данный момент доступен только самый последний кадр данных, тогда как в варианте 1 на данный момент мы можем получить доступ ко всем кадрам данных.

Вопрос 2: когда в программе уничтожается (не может быть доступен) информационный фрейм после завершения программы?

1 Ответ

1 голос
/ 22 апреля 2019

Spark имеет оценку Lazy, поэтому данные будут переданы драйверу после выполнения какого-либо действия (а не для какой-либо переменной, назначенной как традиционное программирование).Этот подход не имеет существенных различий в использовании памяти.Возможно, то, что вы могли видеть чаще (в книгах, учебных пособиях, ...), это:

df=spark.read.format("csv").option("header", "true").load("csvfile.csv")

df.filter(col('country')=='India') \
  .groupBy("State") \
  .agg(max("GDP"), sum("expense"))

Но это то же самое, что и опция 2.

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

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