dask загрузка нескольких файлов паркета с различными вариантами выбора столбцов - PullRequest
0 голосов
/ 24 мая 2019

Я хочу использовать Dask для загрузки определенных столбцов из множества файлов паркета, которые хранятся в разных каталогах, и каждый паркет должен загружать разные столбцы. Я хочу использовать Dask, чтобы я мог использовать несколько ядер на одной машине. Я вижу, как вы можете передать список файлов или подстановочных знаков на dd.read_parquet, чтобы указать несколько файлов (например, *.parquet), но я не вижу способа передачи различных наборов столбцов для чтения для каждого файла. Мне интересно, если это можно сделать с помощью dask.delayed.

Моя конкретная ситуация:

Я храню большие наборы данных по экспрессии генов в одной клетке (~ 30000 строк / генов на ~ 10000 столбцов / клеток) в виде паркетных файлов в разных каталогах. В каждом каталоге есть два файла партера: 1) данные о большом выражении гена (ячейки в виде столбцов) и 2) метаданные ячейки (ячейки в виде строк и метаданные ячейки в виде столбцов). Я использую меньшие файлы паркета метаданных, чтобы найти нужные столбцы / ячейки в файле большего размера. Например, я найду все ячейки, относящиеся к определенному типу ячеек, используя файл партера метаданных, а затем загружу только эти ячейки из файла большего размера. Я могу сделать это с помощью Pandas, но я бы хотел использовать Dask для параллелизма.

1 Ответ

1 голос
/ 25 мая 2019

Если вы можете сделать это, используя Pandas .read_parquet, в то время как задает столбцы , то один из возможных подходов - это отложить ваш существующий подход, специфичный для Pandas, заменив

* 1007.*

от

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

, как вы и предлагали.

РЕДАКТИРОВАТЬ

Мне пришлось сделать что-то подобное для одного каталога парных.csv файлы - метаданные и соответствующие спектры.Моя логика фильтрации была минимальной, поэтому я создал Python dict, чьи ключи были логикой метаданных (которая производила имя файла), а значением был список столбцов.Я перебрал по словарю ключ-значение paris и прочитал

  • в соответствующем списке столбцов из соответствующего файла спектра, используя dd.read_csv(..., columns=[list_of_cols])
  • , добавив ddf к пустому списку(очевидно, за которым следует dd.concat() для вертикальной конкатенации их всех вместе после цикла)

В моем случае, однако, содержимое метаданных изменилось предсказуемым образом, поэтому я мог программно собрать диктет, используя толкование словаря .

...