Какова временная сложность и объем памяти операций с фреймами данных в Spark?

Какова алгоритмическая сложность и / или потребление памяти для операций с фреймами данных в Spark? Я не могу найти никакой информации в документации.

Одним из полезных примеров может быть ответ на объем памяти / диска при расширении фрейма данных другим столбцом (withColumn()): (в Python с автоматической сборкой мусора) лучше сделать table = table.withColumn(…) или extended_table = table.withColumn() занимает примерно столько же памяти?

PS: предположим, что обе таблицы сохраняются с persist().


person Eric O Lebigot    schedule 14.02.2016    source источник


Ответы (1)


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

Дополнительная память необходима только при кэшировании промежуточных результатов с помощью .cache() или .persist().

person Jonathan    schedule 14.02.2016
comment
Хорошая точка зрения. Поэтому мой вопрос был бы более точным: что произойдет, если мы кэшируем как исходную table, так и расширенную версию extended_table, в случае withColumn(): есть ли у нас копия table или просто умное хранилище кто знает, что extended_table - это всего лишь table плюс один столбец? - person Eric O Lebigot; 23.02.2016
comment
Внутренне withColumn() просто вызывает знаменитый select(), основная форма которого всегда работает только с коллекциями столбцов и даже не имеет представления о всей таблице. Это убедительно свидетельствует о том, что сгенерированный DataFrame - ваше умное хранилище. Если вы все еще сомневаетесь, можно легко проверить потребление памяти вашим DataFrame, просмотрев Spark Web UI.. - person Jonathan; 25.02.2016