[英]Repartioning parquet file dask
我想了解一些關於在 Dask 上分割鑲木地板的事情。
當我在 a.csv 文件中執行此操作時,塊大小按預期工作,基於 50 mb 塊執行 30 個分區。
當我嘗試通過 read_parquet 執行相同的邏輯時,不會創建任何分區,當我使用 repartition(partition_size='50mb') 強制執行此操作時,它會創建 109 個分區。
有人可以向我解釋為什么鑲木地板在進行塊大小時似乎不像.csv 那樣工作嗎?
在 CSV 中,基本的、不可分割的數據塊是一行,通常是一個 \n 字符和下一個字符之間的字節。 這個字節塊大小通常很小。 當您使用 dask 加載數據時,它會從給定的偏移量讀取到下一個 \n 以便能夠讀取准確的行數。 您會發現,如果您將塊大小設置得太小,則某些分區將不包含數據。
Parquet 的結構不是這樣的。 它的基本不可拆分塊是“行組”,每個數據文件通常只有一個行組。 這樣做是為了提高效率:在一個塊中編碼和壓縮整個行組的數據將提供最大的讀取吞吐量。 此外,由於編碼和壓縮,dask 很難猜測一個數據集的內存大小 pandas dataframe,但它可以大很多倍。
一個行組的大小很容易達到 >>100MB。 事實上,這通常是推薦的,因為較小的部分在開銷和延遲方面的處理時間會更高。
總結
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.