#scala #apache-spark #spark-dataframe
#scala #apache-spark #spark-dataframe
Вопрос:
При интерактивном изучении набора данных для определенной цели в spark (например, с помощью spark-shell или записной книжки) часто возникает необходимость сохранить результат на диске, чтобы
- упростите свой план выполнения
- постоянно кэшируйте (или
checkpoint
в API RDD) для использования в другом контексте spark (например, вы возвращаетесь домой и не хотите поддерживать свою оболочку spark).
Суть в том, чтобы иметь возможность делать это относительно плавно в вашем коде (минимальное раздувание), немного похоже на checkpoint
систему на RDD, но более устойчиво.
У меня есть несколько требований к библиотеке, выполняющей это:
- Мне нужно иметь возможность
clear
использовать мой кеш в проекте, частично было бы лучше - Мне нужна функция такого типа
readOrCreate
, которая либо вычисляла бы фрейм данных и проверяла его, либо считывала файл контрольной точки. - Мне нужно, чтобы эти функции сохранялись при закрытии контекста spark
На мой взгляд, есть один сложный момент: мне нужен детерминированный идентификатор для моих фреймов данных. Я думаю, что мог бы использовать один из plan и хэшировать его, но он настолько мелкий, что коллизии сделают его очень раздражающим в использовании. Тогда вся очистка кэша, обновление и т. Д. Связаны Только с кодированием логики.
Вот мой вопрос:
- существует ли библиотека, в которой уже реализована система постоянного кэширования?
- Если нет, есть ли у кого-нибудь предложения относительно того, какой элемент фрейма данных лучше всего использовать для хэширования, чтобы создать детерминированный идентификатор, используемый в этом контексте?
редактировать: версия Spark: 1.6.2 (решение в spark 2 приветствуется) edit2: любой указатель (например, репозиторий или проблема) тоже приветствуется
PS: Я, конечно, могу реализовать это, используя предоставленный пользователем идентификатор фрейма данных (т. Е. Имя), Но я бы хотел этого избежать.