【问题标题】:How do I work with large, >30 GiB datasets that are formatted as SAS7DBAT files?如何处理格式化为 SAS7BDAT 文件的大于 30 GiB 的大型数据集?
【发布时间】:2022-01-11 07:23:01
【问题描述】:

我有这 30 个 GiB SAS7BDAT 文件,它们对应于一年的数据。当我尝试使用 pd.read_sas() 导入文件时,出现与内存相关的错误。经过研究,我听到有人提到使用 Dask,将文件分割成更小的块或 SQL。这些答案听起来很广泛,而且由于我是新手,我真的不知道从哪里开始。如果有人可以与我分享一些细节,将不胜感激。谢谢。

【问题讨论】:

  • 我会尝试将其转换为 SQLite 数据库
  • 还要考虑是否可以将大部分数据过滤或流式聚合成“更小、更易于管理”的数据集,而无需在原始整体中使用。如果是这样,这可以作为一次性流式预处理步骤来完成。
  • 有时你必须购买硬件来匹配数据。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: sql pandas database sas dask


【解决方案1】:

我不知道 dask 的此类数据的分区加载程序。但是,pandas API 显然允许您按块流式传输数据,因此您可以将这些块以任何方便的格式写入其他文件,然后以串行方式或使用 dask 处理这些文件。 chunksize 的最佳值取决于您的数据和可用内存。

以下应该可以,但我没有任何此类数据可以尝试。

with pd.read_sas(..., chunksize=100000) as file_reader:
    for i, df in enumerate(file_reader):
        df.to_parquet(f"{i}.parq")

然后你可以加载部件(并行)

import dask.dataframe as dd
ddf = dd.read_parquet("*.parq")

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 2020-05-28
    • 1970-01-01
    • 2023-04-02
    • 2013-07-19
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多