如何从标准输入读取 dask 数据帧?

Posted

技术标签:

【中文标题】如何从标准输入读取 dask 数据帧?【英文标题】:How to make dask dataframe read from stdin? 【发布时间】:2021-11-05 17:34:45 【问题描述】:

对于 dask 数据框,我想将 sys.stdin 作为输入

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

但是,dask.dataframe 只接受文件路径/路径作为输入,因此会报错。 有没有办法用 dask 从 stdin 读取而不必将整个 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

【讨论】:

如果标准输入很大怎么办?因为我将一个大文件的内容作为输入传递给 python 程序 在这种情况下,您确实需要一个流数据库,请查看 streamz:streamz.readthedocs.io/en/latest/dataframes.html 哎呀,您的评论已被编辑,所以我之前的评论是针对流数据的。如果您的数据在文件中,那么最好避免将 stdin 作为中介并直接从文件中读取(使用 dask)。 但是如果输入文件是通过管道传输的,如何让 dask 从标准输入中读取?你能举个例子吗? 好吧,如果数据在文件中,为什么不直接将文件传递给dask(而不是通过stdin)?所以像dd.read_csv(path_to_file, ...) # ... add options as appropriate.

以上是关于如何从标准输入读取 dask 数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何将单个镶木地板文件从 s3 读入 dask 数据帧?

你如何从标准输入读取?

Golang 从标准输入读取,如何检测特殊键(回车、退格...等)

如何从标准输入读取一行,阻塞直到找到换行符?

C语言,程序读取标准输入是啥意思?

如何将多个功能应用于dask数据帧的多个块?