轻松加载具有不同列选择的多个实木复合地板文件

时间:2019-05-24 19:29:29

标签: pandas dask parquet dask-distributed

我想使用Dask从存储在不同目录中的许多镶木文件中加载特定的列,并且每个镶木需要加载不同的列。我想使用Dask,以便可以在一台计算机上使用多个内核。我知道如何将文件或通配符的列表传递给dd.read_parquet来指示多个文件(例如*.parquet),但是我看不到传递要为每个文件读取的不同列集的方法。我想知道是否可以使用dask.delayed

我的具体情况是:

我正在将大型单细胞基因表达数据集(约30,000行/基因,约10,000列/细胞)作为拼写文件存储在不同目录中。每个目录都有两个拼花文件:1)大基因表达数据(单元为列)和2)细胞元数据(单元为行,单元元数据为列)。我正在使用较小的元数据实木复合地板文件来查找较大文件中所需的列/单元格。例如,我将使用元数据组合文件找到所有具有特定单元格类型的单元格,然后仅从较大的文件中加载那些单元格。我可以使用Pandas来做到这一点,但我想使用Dask进行并行处理。

1 个答案:

答案 0 :(得分:1)

如果您可以使用Pandas .read_parquet,而同时使用specifying columns,那么一种可能的方法是通过替换来延迟现有的特定于熊猫的方法

pd.read_parquet(..., columns=[list_of_cols])

作者

dask.delayed(pd.read_parquet)(..., columns=[list_of_cols])

按照您的建议。

编辑

我必须对成对的.csv文件的单个目录执行类似的操作-元数据和相应的光谱。我的过滤逻辑很小,所以我创建了一个Python dict,其键是元数据逻辑(产生文件名),值是列列表。我遍历了字典键值巴黎和

  • 使用dd.read_csv(..., columns=[list_of_cols])从关联的光谱文件中读取相应的列列表
  • ddf附加到一个空白列表(显然后面是dd.concat(),以便在循环后将它们垂直串联在一起)

但是,在我的情况下,元数据内容以可预测的方式发生了变化,这就是为什么我可以使用dictionary comprehension以编程方式组装字典的原因。