【发布时间】:2020-05-08 23:00:25
【问题描述】:
我正在处理大型 CSV 文件,我需要制作笛卡尔积(合并操作)。由于内存错误,我尝试解决 Pandas 的问题(您可以检查 Panda 的代码和数据格式示例同样的问题,here)但没有成功。现在,我正在尝试使用 Dask,它应该可以管理大量数据集,即使它的大小大于可用 RAM。
首先我阅读了两个 CSV:
from dask import dataframe as dd
BLOCKSIZE = 64000000 # = 64 Mb chunks
df1_file_path = './mRNA_TCGA_breast.csv'
df2_file_path = './miRNA_TCGA_breast.csv'
# Gets Dataframes
df1 = dd.read_csv(
df1_file_path,
delimiter='\t',
blocksize=BLOCKSIZE
)
first_column = df1.columns.values[0]
df1.set_index(first_column)
df2 = dd.read_csv(
df2_file_path,
delimiter='\t',
blocksize=BLOCKSIZE
)
first_column = df2.columns.values[0]
df2.set_index(first_column)
# Filter common columns
common_columns = df1.columns.intersection(df2.columns)
df1 = df1[common_columns]
df2 = df2[common_columns]
然后,我将操作存储在磁盘上以防止内存错误:
# Computes a Cartesian product
df1['_tmpkey'] = 1
df2['_tmpkey'] = 1
# Neither of these two options work
# df1.merge(df2, on='_tmpkey').drop('_tmpkey', axis=1).to_hdf('/tmp/merge.*.hdf', key='/merge_data')
# df1.merge(df2, on='_tmpkey').drop('_tmpkey', axis=1).to_parquet('/tmp/')
我制作了a repo to try with exactly the same CSV files that I'm using。我尝试使用较小的 blocksize 值,但我得到了同样的错误。我错过了什么吗?任何形式的帮助都将不胜感激。
【问题讨论】:
-
你也可以分享一下简单的 Pandas 代码吗?你有一个输出应该是什么样子的例子吗?
-
感谢您的关注!我当然可以!我已编辑问题以添加指向另一个 Stack Overflow 问题的链接,您可以在其中欣赏代码和数据格式示例
标签: python python-3.x dask