Мне нужно регулярно загружать большие файлы .avro в Azure Хранилище озера данных (Gen 2), используя PySpark, запускаемый на Databricks. Существует значительная разница в скорости, когда я использую один и тот же код и тот же файл, но сначала загружаю его в хранилище BLOB-объектов, а затем передаю в Data Lake. Для файла размером 100 МБ загрузка файла напрямую в Data Lake занимает приблизительно 15 минут, а для загрузки через хранилище больших двоичных объектов - 0,5 минуты (для прилагаемого примера разница составляла 40 с против 3 с).
В чем может быть причина? Есть ли какой-нибудь более быстрый код для загрузки файла .avro в Data Lake, который я мог бы использовать вместо этого (желательно без подключения хранилища)? Заранее благодарим вас за любые подсказки.
Ниже приведен частичный пример кода с заменой информации для входа в систему (первоначально на основе https://medium.com/@zifah / how-to-write-data-from-an- azure -блоки данных-блокнота-*- 1012 * -блок-хранилище-контейнер-283bfdf23893 ):
from datetime import datetime
import pytz
__storage_account_name = dbutils.secrets.get(scope = "XXXXXXXXXXX", key = "XXXXXXXXXXX")
__storage_account_key = dbutils.secrets.get(scope = "XXXXXXXXXXX", key = "XXXXXXXXXXX")
spark.conf.set("fs.azure.account.key.{}.dfs.core.windows.net".format(__storage_account_name), __storage_account_key)
fileSystem = "datalake"
DataLakeStorageRoot = "abfss://{}@{}.dfs.core.windows.net/".format(fileSystem, __storage_account_name)
DataLakeStoragePath = "{}/temp".format(DataLakeStorageRoot)
max_range = 10000000
spark_df = sqlContext.range(0, max_range)
start_time = datetime.now(pytz.timezone("Europe/Berlin"))
(spark_df
.coalesce(1)
.write
.mode("overwrite")
.option("header", "true")
.format("avro")
.save(DataLakeStoragePath))
end_time = datetime.now(pytz.timezone("Europe/Berlin"))
print(end_time - start_time)