分割資料檔案

已完成

資料分割是一種最佳化技術,可讓 Spark 將背景工作角色節點的效能最大化。 藉由排除不必要的磁碟 IO,即可在查詢中篩選資料時提升更多效能。

分割輸出檔案

若要將資料框架儲存為分割的檔案集,請在寫入資料時使用 partitionBy 方法。

下列範例會建立衍生的 Year 欄位。 然後使用此欄位來分割資料。

from pyspark.sql.functions import year, col

# Load source data
df = spark.read.csv('/orders/*.csv', header=True, inferSchema=True)

# Add Year column
dated_df = df.withColumn("Year", year(col("OrderDate")))

# Partition by year
dated_df.write.partitionBy("Year").mode("overwrite").parquet("/data")

如下所示,分割資料框架時所產生的資料夾名稱包含格式為 column=value 的資料分割資料行名稱和值:

Diagram representing a partitioned file folder structure.

注意

您可以依多個資料行分割資料,這會導致每個資料分割索引鍵的資料夾階層。 例如,您可以依年份和月份分割範例中的順序,讓資料夾階層包含每年值的資料夾,而資料夾階層又會包含每個月值的子資料夾。

篩選查詢中的 parquet 檔案

將資料從 parquet 檔案讀取到資料框架時,您能夠從階層式資料夾內的任何資料夾提取資料。 此篩選程序是透過針對分割欄位使用明確值和萬用字元來完成。

在下列範例中,下列程式碼會提取在 2020 年下訂的銷售訂單。

orders_2020 = spark.read.parquet('/partitioned_data/Year=2020')
display(orders_2020.limit(5))

注意

產生的資料框架中會省略檔案路徑中指定的資料分割資料行。 範例查詢所產生的結果不會包含 Year 資料行 ,所有資料列都是從 2020 年開始。