Как я могу ускорить чтение файла CSV / Parquet из adl: // с помощью fsspec + adlfs? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть файл CSV объемом несколько гигабайт, находящийся в Azure Data Lake. Используя Dask, я могу прочитать этот файл менее чем за минуту следующим образом:

>>> import dask.dataframe as dd
>>> adl_path = 'adl://...'
>>> df = dd.read_csv(adl_path, storage_options={...})
>>> len(df.compute())

Однако я не хочу читать это в Dask или Pandas DataFrame - я хочу прямой доступ к основной файл. (В настоящее время это CSV, но я также хотел бы иметь возможность обрабатывать файлы Parquet.) Поэтому я также пытаюсь использовать adlfs 0.2.0 :

>>> import fsspec
>>> adl = fsspec.filesystem('adl', store_name='...', tenant_id=...)
>>> lines = 0
>>> with adl.open(adl_path) as fh:
>>>    for line in fh:
>>>        lines += 1

В том же Как и в случае с процессом Dask, этот метод считывает только 0,1% входных данных.

Я пытался использовать кэширование fsspec, полагая, что это ускорит доступ после начальное кэширование выполнено:

>>> fs = fsspec.filesystem("filecache", target_protocol='adl', target_options={...}, cache_storage='/tmp/files/')
>>> fs.exists(adl_path) # False
>>> fs.size(adl_path) # FileNotFoundError

>>> # Using a relative path instead of fully-qualified (FQ) path:
>>> abs_adl_path = 'absolute/path/to/my/file.csv'
>>> fs.exists(abs_adl_path) # True
>>> fs.size(abs_adl_path) # 1234567890 -- correct size in bytes
>>> fs.get(abs_adl_path, local_path) # FileNotFoundError
>>> handle = fs.open(abs_adl_path) # FileNotFoundError

Существует ли эффективный способ удаленного чтения CSV (и также Parquet) в виде обычного Python дескриптора файла без загрузки в качестве Dask DataFrame первый?

1 Ответ

1 голос
/ 12 марта 2020

Я не знаю, почему fs.get не работает, но, пожалуйста, попробуйте это для последней строки:

handle = fs.open(adl_path)

т.е. вы открываете исходный путь, но вы получить дескриптор файла в локальный файл (после завершения копирования) где-нибудь в / tmp / files /.

...