【问题标题】:What's the best way to handle large timeseries in dask / xarray?在 dask / xarray 中处理大型时间序列的最佳方法是什么?
【发布时间】:2021-11-19 14:32:28
【问题描述】:

我有 17,000 个 CSV 文件,每个文件都按时间戳排序(有些缺少数据)。 CSV 文件总大小约为 85GB,比我的 32GB RAM 大得多。

我正在尝试找出将这些数据放入时间对齐、内存不足的数据结构的最佳方法,以便我可以计算诸如 PCA 之类的东西。

什么是正确的方法?

(我尝试使用dim=(filename, time) 设置xarray.DataSet,然后尝试将每个CSV 文件上的xr.merge() 设置为DataSet,但每次插入都会变慢,我希望当 RAM 用完时它会崩溃。)

【问题讨论】:

  • 您是否有其他标识符(例如,如果您正在处理财务数据,则为股票代码)?文件是否包含重叠的时间戳? (这对索引很重要)
  • 两个问题都是肯定的!
  • 好的,这有点棘手,因为多索引
  • 我希望创建一个 dim=2 的 xarray,这似乎解决了这个问题?
  • 每个文件的时间维度不仅重叠而且相同吗?如果没有,您将遇到更大的问题,因为 xarray 为每个 (x, y) 对分配内存。如果时间维度相同,您可以使用 xr.open_mfdataset 并使用预处理 arg 将文件转换为 DataArrays,然后写入 zarr(可以处理分布式写入)。否则,我会使用带有dask_ml's implementation of PCA 的dask.dataframe?这可以直接在 dask_dataframe 上工作(我认为 - 如果不是,肯定是 dask.array)。

标签: dask python-xarray


【解决方案1】:

你试过dd.read_csv(...)吗。

Dask 以惰性方式读取 CSV,并且可以以流的方式执行某些操作,因此您可以对大于内存的数据集进行分析。

确保 Dask 在您读入数据时能够正确设置分区。读取数据后,检查dd.divisions 并确保它们是值。

当然,您也可以使用 Dask 集群来访问更多内存。

这些文件非常小,Dask 通常最适合 100MB 左右的分区。您可能想稍微压缩一下数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多