Использование файловой системы в памяти в тестах `pyarrow` - PullRequest
1 голос
/ 29 мая 2019

У меня есть pyarrow код написания набора данных для паркета. Я хочу провести интеграционный тест, который гарантирует, что файл написан правильно. Я хотел бы сделать это, записав небольшой пример данных в файловую систему в памяти. Однако я изо всех сил пытаюсь найти pyarrow -совместимый интерфейс файловой системы в памяти для Python.

Ниже вы найдете фрагмент кода с переменной filesystem. Я хотел бы заменить переменную filesystem файловой системой в памяти, которую я могу позже проверить программно в интеграционных тестах.

import pyarrow.parquet as pq
pq.write_to_dataset(
        score_table,
        root_path=AWS_ZEBRA_OUTPUT_S3_PREFIX,
        filesystem=filesystem,
        partition_cols=[
            EQF_SNAPSHOT_YEAR_PARTITION,
            EQF_SNAPSHOT_MONTH_PARTITION,
            EQF_SNAPSHOT_DAY_PARTITION,
            ZEBRA_COMPUTATION_TIMESTAMP
        ]
    )

1 Ответ

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

Вы можете передать объект файла в памяти в write_to_dataset, если filesystem равно None.

Таким образом, ваш звонок может стать:

from io import BytesIO
import pyarrow.parquet as pq

with BytesIO() as f:
    pq.write_to_dataset(
        score_table,
        root_path=f,
        filesystem=None,
        partition_cols=[
            EQF_SNAPSHOT_YEAR_PARTITION,
            EQF_SNAPSHOT_MONTH_PARTITION,
            EQF_SNAPSHOT_DAY_PARTITION,
            ZEBRA_COMPUTATION_TIMESTAMP
        ]
    )

Соответствующие строки из источника пиарроу:

def resolve_filesystem_and_path(where, filesystem=None):
    """
    Return filesystem from path which could be an HDFS URI, a local URI,
    or a plain filesystem path.
    """
    if not _is_path_like(where):
        if filesystem is not None:
            raise ValueError("filesystem passed but where is file-like, so"
                             " there is nothing to open with filesystem.")
        return filesystem, where

https://github.com/apache/arrow/blob/207b3507be82e92ebf29ec7d6d3b0bb86091c09a/python/pyarrow/filesystem.py#L402-L411

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...