Как сделать так, чтобы фрейм данных dask считывался из stdin?

#python-3.x #pandas #data-science #dask #dask-dataframe

Вопрос:

Для фрейма данных dask я хочу ввести sys.stdin в качестве входных данных

 dask.dataframe.read_csv(sys.stdin, sep=" ", header=None)
 

Но dask.dataframe принимает в качестве входных данных только путь/пути к файлу, поэтому он выдает ошибку.
Есть ли способ читать из stdin с помощью dask без необходимости сохранять весь stdin в файл ?

Здесь содержимое очень большого файла передается в программу python в качестве входных данных.

Ответ №1:

Добавленная стоимость dask в этом случае неясна, поскольку, предположительно stdin , достаточно мала, чтобы поместиться в памяти (если это не так, то интересно, почему данные не сохраняются). В любом случае, вот один из возможных рабочих процессов:

 import sys
import pandas as pd
import dask.dataframe as dd

df = pd.read_csv(sys.stdin, sep=" ", header=None)
ddf = dd.from_pandas(df, npartitions=10) # adjust as appropriate
 

Комментарии:

1. что делать, если stdin очень большой ? поскольку я передаю содержимое большого файла в программу на python в качестве входных данных

2. В том случае, если вам действительно нужна библиотека для потоковой передачи данных, взгляните на streamz: streamz.readthedocs.io/en/latest/dataframes.html

3. упс, ваш комментарий был отредактирован, поэтому мой предыдущий комментарий предназначен для потоковой передачи данных. если ваши данные находятся в файле, то лучше избегать stdin в качестве посредника и считывать их непосредственно из файла (с помощью dask).

4. Но в случае, если входной файл передается по конвейеру, как заставить dask читать из stdin? не могли бы вы привести пример, пожалуйста.

5. Ну, если данные находятся в файле, почему бы не передать файл непосредственно в dask (не через stdin)? так что что-то вроде dd.read_csv(path_to_file, ...) # ... add options as appropriate .