2016-12-05 15 views
1

На свече оболочки я использую следующий код для чтения из файла CSVИзвлечет ли данные данных из внешнего источника на каждое действие?

val df = spark.read.format("org.apache.spark.csv").option("header", "true").option("mode", "DROPMALFORMED").csv("/opt/person.csv") //spark here is the spark session 
df.show() 

Предполагая, что это отображает 10 строк. Если я добавлю новую строку в csv, отредактировав ее, вызовет ли df.show() новую строку? Если это так, означает ли это, что датафрейм считывается из внешнего источника (в данном случае файла csv) для каждого действия?

Обратите внимание, что я не кэшировать dataframe ни я воссоздание dataframe с помощью искрового сессии

ответ

1

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

Таким образом, если вы вызываете 4 действия один за другим, он вычисляет все от начала каждый раз.

Причина простые, искровые работы, создавая DAG, что позволяет визуализировать путь работы от чтения d ata к действию, и он выполняет его.

Именно поэтому существуют кеш и широковещательные переменные. Onus на разработчика знает и кэширует, если они знают, что они будут повторно использовать эти данные или dataframe N раз.

1

TL; DR DataFrame не отличается от РДА. Вы можете ожидать, что действуют те же правила.

С простым планом, как это, ответ да. Он будет читать данные для каждого шоу, хотя, если действие не требует, чтобы все данные (например, here0 он не будет читать весь файл.

В общем случае (планы комплекса выполнения) данные могут получить доступ из перетасовки файлов.

+0

Я не последовал твоему последнему заявлению. Также не искры стараются сохранить rdd в памяти, если память доступна (даже если кеш() или persist() не вызываются)? Какая бы правильная ссылка на документацию могла объяснить это поведение подробно? –

 Смежные вопросы

  • Нет связанных вопросов^_^