Запись фрейма данных 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, у вас есть два варианта сделать это.
Подключите озеро данных 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)
Доступ напрямую с помощью ключа доступа к учетной записи хранения.
Мы можем добавить код
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')
Более подробную информацию можно найти здесь