如何从标准输入读取 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 数据帧?的主要内容,如果未能解决你的问题,请参考以下文章