需要经验法则来处理比笔记本电脑上的内存数据集更大的核心

数据挖掘 Python 熊猫
2022-02-28 18:08:31

对大于 ram 数据集来说是全新的,但我有 csv 文件,每个文件大约 100 gb,每个文件大约有 3 亿行(只有两个)。

我正在寻找的是:不要在笔记本电脑上分析超过 1 TB 的数据。或者不要分析超过 10 倍内存的数据,否则等待时间会令人沮丧。这就是我所说的经验法则。

我有一台带有 i5、8gb ram、ssd 的 mac 笔记本电脑,在 python 中使用 dask 或 blaze 处理这些数据(每个文件 100gb,我有 2 个文件)是否合理?

我已经尝试过并且可以在 csv 中读取,但是在进行简单的试验(例如删除一列或查找数据帧的长度)时,至少需要一个小时才能删除(我放弃了等待),而 length() 则需要半小时(确实完成了)。太慢了,无法生产。我将数据格式更改为镶木地板,令人惊讶的是,数据下降到只有 10 GB。这是他们完成 length() 命令的唯一方法。

所以我的问题是:考虑到我的硬件和 csv 大小,这些响应时间是否正常?我对 dask 能做什么的期望太高了吗?关于如何进行故障排除的任何粗略指南,或者这是否是明显功率不足的硬件?

1个回答

我不是专家,但这就是我看待事物的方式:使用火花。Pyspark 似乎是一种可以使用的风格,因为它是 python 并且这是数据科学所采用的语言。

数据集大小的扩展速度比笔记本电脑上的 RAM 快。“他们”没有告诉你的是 scikit learn、pandas、R 等都需要你的数据集和所有中间步骤来适应 RAM。如果你有一个 8gb 的数据集,并且你对它进行旋转,那么你的中间步骤很容易说是 30gb。即使它是临时的并且要输入您最终清理的数据集。神经网络缩小到 6GB,太糟糕了。您的所有步骤都必须适合 RAM。

在现实世界中,甚至数据集仅限于 RAM 大小的限制也是非常有限的。这是我希望我早点知道的。这就像说这里是一家属于你的杂货店(scikit learn 有很多功能),但你只能带着一个装满物品的购物袋离开商店)。我宁愿开一家杂货店,里面有标准的 100 件商品,让我只吃这 100 件商品的自助餐。

是的,这里和那里都有一些库供 scikit 学习,它们以块的形式从文件中读取,然后将这些块添加在一起,等等。但是您很快就会发现,这是在重新发明轮子,分散了从事数据科学的注意力。事实上,这些框架是为 RAM 使用而构建的。这本身并不是一件坏事,但很快就会变得有限。

你想要的是编写一次代码,而不是让它改变数据集是 1gb 还是 100gb。这就是 pyspark 的用途。您只需学习他们的 API,pyspark 将处理分块和分配工作负载,使其适合您拥有的可用 RAM。当然,如果你是 RAM 有限的计算需要更长的时间,但这没关系。至少你会得到答案。

不利的一面是,如果您想要非常感谢的能力而不必担心“这个数据集对于我的 ram 来说是否太大”的问题,那么您需要留在 pyspark 的 API 中。如果他们没有说 scikit learn 有或 keras 有的功能,那就太糟糕了。编写自己的或解决它。

谢天谢地,API 看起来非常完整。

哪里不足?比如说神经网络,你不会拥有 Keras 可以拥有的各种特殊激活函数和自定义。

但根据我的经验,它确实很少,更多的数据和更好的数据在很多时候都击败了特定的算法。我只想说,我宁愿能够处理大量数据并使用普通分类器,也不愿局限于 RAM 数据集大小,同时能够优化 1000 个超参数。

作为初学者,您也不希望一直在不同的 API 之间切换。

因此,如果您的数据集有可能大于 RAM(我认为这种可能性在未来几年几乎可以肯定),我绝对会学习 pyspark。甚至在 scikit 学习之前。