簡體   English   中英

讀取鑲木地板文件時 Dask OutOfBoundsDatetime

[英]Dask OutOfBoundsDatetime when reading parquet files

以下代碼失敗

pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: -221047-10-07 10:43:35

from pathlib import Path

import dask.dataframe as dd
import numpy as np
import pandas as pd
import tempfile


def run():
    temp_folder = tempfile.TemporaryDirectory()
    rng = np.random.default_rng(42)
    filenames = []
    for i in range(2):
        filename = Path(temp_folder.name, f"file_{i}.gzip")
        filenames.append(filename)
        df = pd.DataFrame(
            data=rng.normal(size=(365, 1500)),
            index=pd.date_range(
                start="2021-01-01",
                end="2022-01-01",
                closed="left",
                freq="D",
            ),
        )
        df.columns = df.columns.astype(str)
        df.to_parquet(filename, compression="gzip")
    df = dd.read_parquet(filenames)
    result = df.mean().mean().compute()
    temp_folder.cleanup()
    return result


if __name__ == "__main__":
    run()

為什么此(示例)代碼會失敗?

我想做什么:循環類似於批量創建大於 memory 的數據。 在下一步中,我想從文件中讀取該數據並在 dask 中使用它。

觀察:

如果我只讀一個文件

for i in range(1):

代碼正在運行。

如果我不使用 DateTimeIndex

df = pd.DataFrame(
            data=rng.normal(size=(365, 1500)),
        )

代碼正在運行。

如果我只使用 pandas

df = pd.read_parquet(filenames)
result = df.mean().mean()

代碼正在運行。 (這很奇怪,因為pandas 中的 read_parquet 只需要一個路徑而不是一個集合

如果我按照此處的建議將分布式客戶端與 concat 一起使用,我會收到類似的錯誤pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 68024-12-20 01:46:56因此我在示例中省略了客戶端.

感謝@mdurant 的有用評論,提供引擎幫助:

engine='fastparquet'  # or 'pyarrow'
df.to_parquet(filename, compression="gzip", engine=engine)
df = dd.read_parquet(filenames, engine=engine)

顯然 engine='auto' 在安裝了多個 parquet 引擎時在 dask 與 pandas 中選擇了不同的引擎。

旁注:我嘗試了不同的引擎組合,這會觸發問題中的錯誤:

df.to_parquet(filename, compression="gzip", engine='pyarrow')
df = dd.read_parquet(filenames, engine='fastparquet')

暫無
暫無

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

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