我不是专家,但这就是我看待事物的方式:使用火花。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 学习之前。