簡體   English   中英

Dask 按鍵寫入多個 parquet 文件

[英]Dask writing into multiple parquet files by key

我在磁盤上有一個非常大的數據集作為 csv 文件。 我想將其加載到 dask 中,進行一些清理,然后將每個日期值的數據保存到單獨的文件/文件夾中,如下所示:

.
└── test
    └── 20211201
        └── part.0.parquet
    └── 20211202
        └── part.0.parquet

我正在努力弄清楚如何有效地做到這一點。

我考慮過做類似的事情的方法:

ddf = dd.read_csv('big_data.csv').map_partitions(clean_data)
ddf.to_parquet('test', partition_on='date')

我得到一個目錄結構如下:

.
└── test
    └── date=2021-12-01T00:00:00
        └── part.0.parquet
    └── date=2021-12-02T00:00:00
        └── part.0.parquet

值得注意的是,如果我隨后嘗試讀取“test/date=2021-12-02T00:00:00”文件,我看不到與日期對應的字段。此外,我無法控制文件的命名. 之后我可能會循環返回這些值,讀入它們,重命名它們,然后用新的日期列寫回它們,但這似乎很浪費。這是我最好的選擇嗎?

我還考慮過按日期列進行分區,並嘗試遍歷分區,隨心所欲地編寫它們,但后來我想我每次都會重新計算完整的管道(除非你堅持,但這個數據集太大了存儲在內存中)。

使用 dask 創建這樣的分區數據的最佳實踐是什么?

我想指出,在原始的 output 數據樹中,您可以在一個 go 中訪問整個數據集:

dd.read_parquet("test")

你會看到date字段存在,從目錄名稱解析。 您可以 select 在read_parquet或之后的特定日期值,您將只加載那些滿足條件的文件。 這就是重點——您不需要將分區字段的值復制到每個數據文件中。

我想到了。 Map_partitions 采用 function,function 可以采用可選的 partition_info 參數(包含分區鍵)。 我寫了一個 function 來保存具有所需名稱的數據集(並重置索引以便出現關鍵字段),並在這個 function 上使用了 map_partitions。

暫無
暫無

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

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