繁体   English   中英

Dask dataframe saving to_csv for incremental data - 高效写入csv

[英]Dask dataframe saving to_csv for incremental data - Effecient Writing to csv

我有一个现有代码用于读取流数据并使用pandas DataFrame 存储它(新数据每 5 分钟出现一次),然后我明智地捕获此数据类别(~350 个类别)。

接下来,我在循环中使用to_csv写入所有数据(因为这是增量存储)。

伪代码如下:

    for row in parentdf.itertuples(): #insert into <tbl> .
        mycat = row.category # this is the ONLY parameter which is passed to the Key function below.
        try:
            df = FnforExtractingNParsingData(mycat ,NumericParam1,NumericParam1) 
    
            df.insert(0,'NewCol',sym)
            df = df.assign(calculatedCol = functions1(params))
            df = df.assign(calculatedCol1 = functions2(params),20))
            df = df.assign(calculatedCol3 = functions3(More params),20))
            df[20:].to_csv(outfile, mode='a', header=False, index=False)

csv 中的类别读取和存储需要2 分钟-每个周期*。 对于 350 个类别的增量写入,这接近 0.34 秒 我想知道我是否可以通过使用dask数据帧使上述过程更快、更高效。

我查阅了 dask.org 并没有得到任何明确的答案,我也查看了用例。

其他详细信息:我正在使用 Python 3.7 和Pandas 0.25 ,而且上面的代码不会返回任何错误,即使我们已经在上面完成了大量的异常处理。 我的密钥 function 即FnforExtractingNParsingData相当有弹性,并且可以按预期工作很长时间。

听起来您每 5 分钟将数据读入 Pandas DataFrame,然后将其写入磁盘。 这个问题没有提到一些关键事实:

  • 每 5 分钟提取多少数据(10MB 或 10TB)?
  • 正在执行的代码在哪里(AWS Lambda 或一大群机器)?
  • FnforExtractingNParsingData执行哪些数据操作?

Dask DataFrame 可以作为多个 CSV 文件并行写入磁盘,这比使用 Pandas 写入单个文件要快很多,但这要视情况而定。 Dask 对于一个很小的数据集来说有点矫枉过正。 Dask 可以利用一台机器的所有 CPU,因此它可以比大多数人意识到的更好地在一台机器上进行扩展。 对于大型数据集,Dask 会有很大帮助。 请随时在您的问题中提供更多详细信息,我可以提供更具体的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM