[英]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.