Запись фрейма данных Azure databricks приводит к ошибке прерывания задания

Я пытаюсь записать данные в файлы csv и сохранить файл в Azure Data Lake Gen2 и получаю сообщение об ошибке прерывания задания. Этот же код раньше работал нормально.

Сообщение об ошибке:

org.apache.spark.SparkException: Job aborted.   

Код:

import requests
response = requests.get('https://myapiurl.com/v1/data', auth=('user', 'password'))
data = response.json()
from pyspark.sql import *
df=spark.createDataFrame([Row(**i) for i in data])  
df.write.format(source).mode("overwrite").save(path) #error line

1 ответ

Решение

Я резюмирую решение ниже

Если вы хотите получить доступ к озеру данных Azure поколения 2 в блоках данных Azure, у вас есть два варианта сделать это.

  1. Подключите озеро данных Azure Gen2 как файловую систему Azure databricks. После этого вы можете читать и записывать файлы с путем/mnt/<>. И нам просто нужно запустить код один раз.

    а. Создайте субъект-службу и назначьте участника службы хранилища BLOB-объектов для sp в области учетной записи хранения Data Lake Storage 2-го поколения.

     az login
    
     az ad sp create-for-rbac -n "MyApp" --role "Storage Blob Data Contributor" \
    --scopes /subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>
    

    б. код

     configs = {"fs.azure.account.auth.type": "OAuth",
      "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
      "fs.azure.account.oauth2.client.id": "<appId>",
      "fs.azure.account.oauth2.client.secret": "<clientSecret>",
      "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<tenant>/oauth2/token",
      "fs.azure.createRemoteFileSystemDuringInitialization": "true"}
    
     dbutils.fs.mount(
        source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/folder1",
        mount_point = "/mnt/flightdata",
        extra_configs = configs)
    
  2. Доступ напрямую с помощью ключа доступа к учетной записи хранения.

    Мы можем добавить код spark.conf.set( "fs.azure.account.key.<storage-account-name>.dfs.core.windows.net", "<storage-account-access-key-name>")к нашему сценарию. Затем мы можем читать и записывать файлы с путемabfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/.

    например

     from pyspark.sql.types import StringType
     spark.conf.set(
       "fs.azure.account.key.testadls05.dfs.core.windows.net", "<account access key>")
    
      df = spark.createDataFrame(["10", "11", "13"], StringType()).toDF("age")
      df.show()
      df.coalesce(1).write.format('csv').option('header', True).mode('overwrite').save('abfss://test@testadls05.dfs.core.windows.net/result_csv') 
    

Более подробную информацию можно найти здесь

Другие вопросы по тегам