加载具有不同列选择的多个镶木地板文件
dask loading multiple parquet files with different column selections
我想使用 Dask 从存储在不同目录中的许多镶木地板文件中加载特定列,并且每个镶木地板需要加载不同的列。我想使用 Dask,这样我就可以在一台机器上使用多个内核。我看到了如何将文件列表或通配符传递给 dd.read_parquet
以指示多个文件(例如 *.parquet
),但我没有看到传递不同的列集以供每个文件读取的方法.我想知道这是否可以使用 dask.delayed
.
来完成
我的具体情况是:
我将大型单细胞基因表达数据集(~30,000 rows/genes x ~10,000 columns/cells)作为镶木地板文件存储在不同的目录中。每个目录都有两个 parquet 文件 1) 大基因表达数据(细胞作为列)和 2) 细胞元数据(细胞作为行,细胞元数据作为列)。我正在使用较小的元数据镶木地板文件来查找较大文件中需要的 columns/cells。例如,我将使用元数据 parquet 文件查找属于特定单元格类型的所有单元格,然后仅加载较大文件中的那些单元格。我可以使用 Pandas 来执行此操作,但我想使用 Dask 进行并行处理。
如果您可以使用 Pandas .read_parquet
, while specifying columns 执行此操作(请参阅最后一个代码示例),那么一种可能的方法是通过替换
来延迟现有的 Pandas-specific 方法
pd.read_parquet(..., columns=[list_of_cols])
来自
dask.delayed(pd.read_parquet)(..., columns=[list_of_cols])
正如您所建议的那样。
编辑
我必须对成对 .csv
文件的单个目录执行类似的操作 - 元数据和相应的光谱。我的过滤逻辑很少,所以我创建了一个 Python 字典,它的键是元数据逻辑(生成文件名),值是列列表。我遍历了字典 key-value paris 和
- 使用
dd.read_csv(..., columns=[list_of_cols])
从关联的光谱文件中读取相应的列列表
- 将
ddf
附加到一个空白列表(显然后跟 dd.concat()
以在循环后将它们垂直连接在一起)
不过,就我而言,元数据内容以可预测的方式更改,这就是为什么我可以使用 dictionary comprehension.
以编程方式 assemble 字典的原因
我想使用 Dask 从存储在不同目录中的许多镶木地板文件中加载特定列,并且每个镶木地板需要加载不同的列。我想使用 Dask,这样我就可以在一台机器上使用多个内核。我看到了如何将文件列表或通配符传递给 dd.read_parquet
以指示多个文件(例如 *.parquet
),但我没有看到传递不同的列集以供每个文件读取的方法.我想知道这是否可以使用 dask.delayed
.
我的具体情况是:
我将大型单细胞基因表达数据集(~30,000 rows/genes x ~10,000 columns/cells)作为镶木地板文件存储在不同的目录中。每个目录都有两个 parquet 文件 1) 大基因表达数据(细胞作为列)和 2) 细胞元数据(细胞作为行,细胞元数据作为列)。我正在使用较小的元数据镶木地板文件来查找较大文件中需要的 columns/cells。例如,我将使用元数据 parquet 文件查找属于特定单元格类型的所有单元格,然后仅加载较大文件中的那些单元格。我可以使用 Pandas 来执行此操作,但我想使用 Dask 进行并行处理。
如果您可以使用 Pandas .read_parquet
, while specifying columns 执行此操作(请参阅最后一个代码示例),那么一种可能的方法是通过替换
pd.read_parquet(..., columns=[list_of_cols])
来自
dask.delayed(pd.read_parquet)(..., columns=[list_of_cols])
正如您所建议的那样。
编辑
我必须对成对 .csv
文件的单个目录执行类似的操作 - 元数据和相应的光谱。我的过滤逻辑很少,所以我创建了一个 Python 字典,它的键是元数据逻辑(生成文件名),值是列列表。我遍历了字典 key-value paris 和
- 使用
dd.read_csv(..., columns=[list_of_cols])
从关联的光谱文件中读取相应的列列表
- 将
ddf
附加到一个空白列表(显然后跟dd.concat()
以在循环后将它们垂直连接在一起)
不过,就我而言,元数据内容以可预测的方式更改,这就是为什么我可以使用 dictionary comprehension.
以编程方式 assemble 字典的原因