pyspark:使用选定的列或分区优化从delta读取/加载

jyztefdp  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(454)

我正在尝试将数据从delta加载到pysparkDataframe中。

path_to_data = 's3://mybucket/daily_data/'
df = spark.read.format("delta").load(path_to_data)

现在,基础数据按日期划分为

s3://mybucket/daily_data/
    dt=2020-06-12
    dt=2020-06-13
    ...
    dt=2020-06-22

有没有办法优化read as dataframe,给定:
只需要特定的日期范围
只需要列的子集
目前我尝试的方法是:

df.registerTempTable("my_table")
new_df = spark.sql("select col1,col2 from my_table where dt_col > '2020-06-20' ")

# dt_col is column in dataframe of timestamp dtype.

在上述状态下,spark是否需要加载整个数据,根据日期范围过滤数据,然后过滤需要的列?在pyspark read中是否有任何优化可以用来加载已经分区的数据?
关于以下内容:

df = spark.read.format("delta").load(path_to_data,cols_to_read=['col1','col2'])
or 
df = spark.read.format("delta").load(path_to_data,partitions=[...])
1dkrff03

1dkrff031#

在您的情况下,不需要额外的步骤。优化将由spark负责。因为您已经基于列对数据集进行了分区 dt 当您尝试查询具有分区列的数据集时 dt 作为过滤条件。spark只加载源数据集中与筛选条件匹配的数据子集,在您的情况下是这样的 dt > '2020-06-20' .
spark在内部执行基于优化的分区修剪。

相关问题