我想知道下面的伪代码是否是从 PySpark(Azure Databricks)读取存储在 Azure Data Lake 中的日期范围之间的多个镶木地板文件的有效方法。注意:parquet 文件不按日期分区。
我使用 uat/EntityName/2019/01/01/EntityName_2019_01_01_HHMMSS.parquet 约定在 ADL 中存储数据,如 Nathan Marz 的《大数据》一书中所建议的,稍作修改(使用 2019 而不是 year=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");