[英]PySpark : Optimize read/load from Delta using selected columns or partitions
我正在嘗試將來自 Delta 的數據加載到 pyspark dataframe 中。
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
有沒有辦法將讀取優化為 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.
在上面的 state 中,Spark 是否需要加載整個數據,根據日期范圍過濾數據,然后過濾所需的列? 是否可以在 pyspark 讀取中進行任何優化,以加載數據,因為它已經分區?
在線的東西:
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=[...])
在您的情況下,不需要額外的步驟。 Spark 將負責優化。 由於當您嘗試使用分區列dt
作為過濾條件查詢數據集時,您已經根據列dt
對數據集進行了分區。 Spark 僅從源數據集中加載與過濾條件匹配的數據子集,在您的情況下為dt > '2020-06-20'
。
Spark 在內部進行基於優化的分區修剪。
要做到這一點沒有 SQL..
from pyspark.sql import functions as F
df = spark.read.format("delta").load(path_to_data).filter(F.col("dt_col") > F.lit('2020-06-20'))
雖然對於這個例子,你可能需要做一些比較日期的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.