Как извлечь все данные строк из spark dataframe в файл, используя pyspark в databricks

#python #pyspark #apache-spark-sql #azure-databricks

#python #pyspark #apache-spark-sql #azure-databricks

Вопрос:

Я пытаюсь извлечь все данные строк из spark dataframe в файл в databricks. Я могу записать данные df в файл с небольшим количеством отсчетов. Предположим, если я получаю счетчик в df как 100, то в файле его 50, поэтому он пропускает данные.Как я могу загрузить завершенные данные из фрейма данных в файл, не пропуская данные. Я создал udf, который udf откроет файл и добавит к нему данные.Я вызвал этот udf в spark sql df.

Может кто-нибудь помочь мне в этом вопросе?

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

1. Не могли бы вы поделиться кодом, который вы пытаетесь выполнить?

Ответ №1:

Я бы не советовал использовать udf так, как вы, по нескольким причинам:

  • UDF выполняются на рабочих узлах, поэтому у вас будет несколько udf, каждый из которых записывает часть ваших данных в локальный файл.
  • Даже если ваш UDF добавляется к файлу в общем расположении (например, DBFS), у вас все равно есть несколько узлов, записывающих в файл одновременно, что может привести к ошибкам.
  • У Spark уже есть способ сделать это из коробки, которым вы должны воспользоваться

Чтобы записать фрейм данных spark в файл в databricks: используйте атрибут Dataframe.write (Databricks docs). Существует множество вариантов, поэтому вы должны иметь возможность делать все, что вам нужно (документы Spark (этот для CSV))

Примечание о разделах: Spark записывает каждый раздел DF в свой собственный файл, поэтому вам следует использовать функцию coalesce (предупреждение: это очень медленно при очень больших кадрах данных, поскольку spark должен уместить весь фрейм данных в память на узле драйвера)

Примечание о расположении файлов:Указанный вами путь к файлу будет находиться на узле драйвера, поэтому, если вы не планируете считывать его с помощью другого скрипта, вы должны начать свой путь с «/ dbfs» , который монтируется на все файловые системы узлов.Таким образом, он сохраняется в файловой системе Databricks, которая доступна из любого кластера в вашем экземпляре databricks. (Он также доступен для загрузки с помощью командной строки Databricks.)

Полный пример:

 df_to_write = my_df.select(<columns you want>)
df_to_write.coalesce(1).write.csv("/dbfs/myFileDownloads/dataframeDownload.csv")