参考资料:
需要注意的几点:
我总共有48gb的ram
以下是我使用的库的版本
im导入熊猫的原因仅适用于此行pd.options.mode.chained_assignment = None
这有助于在im使用dask.distributed时处理dask错误
所以,我有一个21gb的csv文件,我正在使用dask和jupyter笔记本阅读。。。 我试图从mysql数据库表中读取它,但是,内核最终崩溃了
我尝试了多种组合使用我的本地工作网络、线程和可用内存、可用存储和内存,甚至尝试根本不使用distributed
。我也尝试过使用pandas进行分块(不是使用上面提到的与pandas相关的行),但是,即使使用分块,内核仍然崩溃
我现在可以用dask加载csv,并应用一些转换,例如设置索引,添加fbprophet需要的列(名称)。。。但是我仍然无法用df.compute()
计算数据帧,因为这就是为什么我认为我收到了fbprophet的错误。在我用适当的数据类型添加了y列和ds列之后,我收到了错误Truth of Delayed objects is not supported
,我认为这是因为fbprophet期望数据帧不是惰性的,这就是我试图预先运行compute的原因。我还增加了客户机上的ram,以允许它使用完整的48gb,因为我怀疑它可能会尝试两次加载数据,但是,这仍然失败,因此很可能这不是问题的原因
除此之外,dask的文档中也提到了fbpropphet,用于将机器学习应用于数据帧,然而,我真的不明白为什么这不起作用。。。我也试过莫丁和雷,还有达斯克,结果基本相同
另一个问题。。。关于内存使用
distributed.worker - WARNING - Memory use is high but worker has no data to store to disk. Perhaps some other process is leaking memory? Process memory: 32.35 GB -- Worker memory limit: 25.00 GB
我在分配客户端、读取csv文件以及对数据帧应用操作/转换时遇到此错误,但是分配的大小大于csv文件本身,因此这让我感到困惑
我自己做了些什么来尝试解决这个问题: -当然,谷歌搜索没有发现任何东西:-/ -多次询问不和谐帮助频道 -多次询问IIRC帮助频道
无论如何,我真的非常感谢在这个问题上的任何帮助!!! 提前感谢:)
MCVE
from dask.distributed import Client
import dask.dataframe as dd
import pandas as pd
from fbprophet import Prophet
pd.options.mode.chained_assignment = None
client = Client(n_workers=2, threads_per_worker=4, processes=False, memory_limit='4GB')
csv_file = 'provide_your_own_csv_file_here.csv'
df = dd.read_csv(csv_file, parse_dates=['Time (UTC)'])
df = df.set_index('Time (UTC)')
df['y'] = df[['a','b']].mean(axis=1)
m = Prophet(daily_seasonality=True)
m.fit(df)
# ERROR: Truth of Delayed objects is not supported
不幸的是,Prophet今天不支持Dask数据帧
您提到的示例显示了使用Dask加速Prophet在数据帧上的拟合。Dask数据帧只是人们使用Dask的一种方式
作为already suggested,一种方法是将
dask.delayed
与pandasDataFrame
一起使用,并跳过dask.dataframe
您可以使用所示的简化版^{}-^{}-^{} pipeline 进行使用Dask的自定义计算
这里有一种基于这种定制管道的可能方法,使用小的数据集(创建MCVE)-管道中的每一步都将延迟
进口
在
.csv
中生成一些列名为Time (UTC)
、a
和b
的数据首先从管道中写入} decorator 延迟其执行
load
函数,用Pandas加载.csv
,并使用^{dask.delayed
对象,而不是pandas.DataFrame
现在创建
process
函数,使用pandas
处理数据,再次延迟,因为它的输入是dask.delayed
对象而不是pandas.DataFrame
最后一个函数-此函数将对数据(从
.csv
加载并处理,但延迟)进行训练fbprophet
以进行预测。这个analyze
函数也会延迟,因为它的一个输入是dask.delayed
对象运行管道(如果从Python脚本运行,requires
__name__ == "__main__"
)fbprophet
进行的预测)存储在变量result
中,该变量被延迟pandas.DataFrame
(对应于fbprophet
预测的输出),因此可以使用result.compute()
对其进行评估输出
相关问题 更多 >
编程相关推荐