以下の疑似コードが、PySpark(Azure Databricks) から Azure Data Lake に保存されている日付範囲内の複数の寄木細工のファイルを読み取る効率的な方法であるかどうかを知りたいです。注: 寄木細工のファイルは日付で分割されていません。
私は uat/EntityName/2019/01/01/EntityName_2019_01_01_HHMMSS.parquet 規則を使用して、ADL にデータを格納するために、Nathan Marz 著の書籍 Big Data で提案されているように、少し変更を加えました (year=2019 の代わりに 2019 を使用)。
* ワイルドカードを使用してすべてのデータを読み取ります。
df = spark.read.parquet(uat/EntityName/*/*/*/*)
文字列操作を使用して EntityName_2019_01_01_HHMMSS.parquet からタイムスタンプを抽出し、TimestampType() に変換する列 FileTimestamp を追加します。
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");