Библиотека контрольных точек (постоянное кэширование) для фрейма данных Spark — используйте или разрабатывайте — детерминированный идентификатор для фреймов данных

#scala #apache-spark #spark-dataframe

#scala #apache-spark #spark-dataframe

Вопрос:

При интерактивном изучении набора данных для определенной цели в spark (например, с помощью spark-shell или записной книжки) часто возникает необходимость сохранить результат на диске, чтобы

  • упростите свой план выполнения
  • постоянно кэшируйте (или checkpoint в API RDD) для использования в другом контексте spark (например, вы возвращаетесь домой и не хотите поддерживать свою оболочку spark).

Суть в том, чтобы иметь возможность делать это относительно плавно в вашем коде (минимальное раздувание), немного похоже на checkpoint систему на RDD, но более устойчиво.

У меня есть несколько требований к библиотеке, выполняющей это:

  1. Мне нужно иметь возможность clear использовать мой кеш в проекте, частично было бы лучше
  2. Мне нужна функция такого типа readOrCreate , которая либо вычисляла бы фрейм данных и проверяла его, либо считывала файл контрольной точки.
  3. Мне нужно, чтобы эти функции сохранялись при закрытии контекста spark

На мой взгляд, есть один сложный момент: мне нужен детерминированный идентификатор для моих фреймов данных. Я думаю, что мог бы использовать один из plan и хэшировать его, но он настолько мелкий, что коллизии сделают его очень раздражающим в использовании. Тогда вся очистка кэша, обновление и т. Д. Связаны Только с кодированием логики.

Вот мой вопрос:

  • существует ли библиотека, в которой уже реализована система постоянного кэширования?
  • Если нет, есть ли у кого-нибудь предложения относительно того, какой элемент фрейма данных лучше всего использовать для хэширования, чтобы создать детерминированный идентификатор, используемый в этом контексте?

редактировать: версия Spark: 1.6.2 (решение в spark 2 приветствуется) edit2: любой указатель (например, репозиторий или проблема) тоже приветствуется

PS: Я, конечно, могу реализовать это, используя предоставленный пользователем идентификатор фрейма данных (т. Е. Имя), Но я бы хотел этого избежать.