#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
.