Как обеспечить атомарность нескольких строк кода вместе в Pyspark?

#apache-spark #pyspark #databricks #azure-databricks #atomic

#apache-spark #pyspark #databricks #azure-databricks #атомарный

Вопрос:

Я пишу код Pyspark в записной книжке Azure Databricks, где в конце записной книжки мне нужно записать результаты обратно в 3 разных места (2 таблицы в базе данных databricks и 1 папка в ADLS), и у меня есть 3 разные функции (WriteResultsToTable1, WriteResultsToTable2, WriteResultsToADLS), созданные для этой операции, и я вызываю ихв моей основной функции и, следовательно, для выполнения этой операции есть 3 строки кода, но я хочу, чтобы либо результаты были успешно записаны во все 3 местоположения, либо ни в одно, т.Е. Либо Все 3 строки кода успешно выполняются в моей основной функции, либо ни одна из них

Может кто-нибудь, пожалуйста, предложить какой-нибудь способ достижения этого в databricks с использованием pyspark?

Комментарии:

1. В принципе, вам нужна ACIDity в распределенной системе? blog.knoldus.com/spark-acid-compliant-or-not tl; dr: искра не совместима с кислотами

Ответ №1:

Как упоминал Стивен, Spark не совместим с ACID. Однако вы можете создать другую таблицу, чтобы отслеживать, записываются ли ваши результаты в Table1, Table2 и ADLS. Это позволит вам создать логику повторных попыток и сделать ваш процесс «атомарным».

Чтобы это сработало, ваша таблица, которую вы будете использовать для отслеживания процесса, может содержать 5 столбцов:

  1. ProcessName
  2. Current_Timestamp
  3. Флаг для проверки, записана ли таблица1
  4. Установите флажок, чтобы проверить, записана ли таблица2
  5. Установите флажок, чтобы проверить, записан ли ADLS

В начале вашей записной книжки вы можете написать логику для проверки последней временной метки для этого процесса и убедиться, что все три флага указывают, что результаты записаны для последней временной метки. В случае, если один из флагов указывает, что результаты не записаны, ваша логика должна диктовать, что он записывает в соответствующую целевую таблицу / ADL с текущим состоянием данных.

Обратите внимание: обновляйте флаги только для каждого шага ЗАПИСИ после записи в каждую таблицу / ADLS.