Я хотел бы знать, является ли приведенный ниже псевдокод эффективным методом чтения нескольких паркетных файлов между диапазоном дат, хранящимся в Azure Data Lake, из PySpark (Azure Databricks). Примечание: файлы паркета не разбиты на разделы по дате.
Я использую соглашение uat / EntityName / 2019/01/01 / EntityName_2019_01_01_HHMMSS.parquet для хранения данных в ADL, как это предлагается в книге Натана Марца Big Data с небольшой модификацией (с использованием 2019 вместо года = 2019).
Прочтите все данные, используя подстановочный знак *:
df = spark.read.parquet(uat/EntityName/*/*/*/*)
Добавьте столбец FileTimestamp, который извлекает временную метку из EntityName_2019_01_01_HHMMSS.parquet, используя строковую операцию и преобразовывая в TimestampType ()
df.withColumn(add timestamp column)
Используйте фильтр, чтобы получить релевантные данные:
start_date = '2018-12-15 00:00:00'
end_date = '2019-02-15 00:00:00'
df.filter(df.FileTimestamp >= start_date).filter(df.FileTimestamp < end_date)
По сути, я использую PySpark для имитации аккуратного синтаксиса, доступного в U-SQL:
@rs =
EXTRACT
user string,
id string,
__date DateTime
FROM
"/input/data-{__date:yyyy}-{__date:MM}-{__date:dd}.csv"
USING Extractors.Csv();
@rs =
SELECT *
FROM @rs
WHERE
date >= System.DateTime.Parse("2016/1/1") AND
date < System.DateTime.Parse("2016/2/1");