簡體   English   中英

重新分區鑲木地板文件 dask

[英]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。 事實上,這通常是推薦的,因為較小的部分在開銷和延遲方面的處理時間會更高。

總結

  • dask 不會將 parquet 數據集拆分到數據文件中的分區之外
  • memory 中的分區大小可能比磁盤上的大很多倍,因此加載后重新分區可能會導致許多分區
  • 這些是使鑲木地板盡可能快速和節省空間所需的權衡

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM