Spa*_*att 8 python apache-spark pyspark delta-lake
我正在尝试将 Delta 的数据加载到 pyspark 数据框中。
path_to_data = 's3://mybucket/daily_data/'
df = spark.read.format("delta").load(path_to_data)
Run Code Online (Sandbox Code Playgroud)
现在基础数据按日期分区为
s3://mybucket/daily_data/
dt=2020-06-12
dt=2020-06-13
...
dt=2020-06-22
Run Code Online (Sandbox Code Playgroud)
有没有办法优化 Dataframe 的读取,给出:
目前我尝试的方法是:
s3://mybucket/daily_data/
dt=2020-06-12
dt=2020-06-13
...
dt=2020-06-22
Run Code Online (Sandbox Code Playgroud)
在上述状态下,Spark是否需要加载整个数据,根据日期范围过滤数据,然后过滤所需的列?由于数据已经分区,因此可以在 pyspark read 中进行任何优化来加载数据吗?
线上的一些东西:
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.
Run Code Online (Sandbox Code Playgroud)
对于您的情况,不需要额外的步骤。Spark 会负责优化。由于当您尝试使用分区列作为过滤条件dt查询数据集时,您已经根据列对数据集进行了分区dt。Spark 仅加载源数据集中与过滤条件匹配的数据子集,在您的情况下为dt > '2020-06-20'。
Spark 内部进行基于优化的分区修剪。
| 归档时间: |
|
| 查看次数: |
48943 次 |
| 最近记录: |