这个项目有什么理由使用 hadoop/spark?

数据挖掘 数据清理 数据库
2022-03-10 17:57:33

我正在准备几个自学项目来探索机器学习技术。

第一个项目有 10,000 个时间序列,每天有 24 个浮点数据点,持续 10 年(8.76 亿点)。我将为数据创建一堆日历和天气特征,然后尝试使用各种机器学习技术进行预测。

第二是大约 1300 万行文本数据(每行几个段落)用于分类。(目前在 solr 数据库中)

我的计算设备是 6 核、32g 内存、gforce GPU。我打算安装 Ubuntu 14.2。

我希望使用 python 进行文件处理,使用 scilearn、pylearn2 和 word2vec 进行一般探索和训练。R 用于体验该语言。

显然,数据集 1 需要将天气和日历数据加入日期/时间以及跨时间和位置的聚合。我知道如何将它全部塞入 MySQL 数据库并在那里进行聚合和连接,但我一直在阅读有关 spark 的信息并想知道。

……

如果我花时间使用 virtual box/hadoop/spark 模拟集群(为了我的学习经验,而不是性能),我可以/应该在那里进行聚合并将结果写入分布式数据存储吗?

由于深度学习不能在 Spark 上运行,这是否意味着我需要将聚合数据复制回本地文件系统才能使用其中的一些技术?

对于数据集 2,我想运行 kaggle 教程https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-2-word-vectors中的 word2vec 算法。在那个例子中,这是一种深度学习方法,所以我应该把数据留在 solr.. 对吗?

一般来说,我正在寻找合适的应用程序并深入了解从应用程序到应用程序的数据流,以帮助我开始尝试各种 ML 技术。

谢谢你帮助我

2个回答

特别是当您的主要目标是学习时,我会将其分为几个阶段:

  1. 使用 matplotlib 熟悉 pandas 数据框和可视化。尝试使用 pandas 加载数据集的子集并使用 matplotlib 将它们可视化,例如绘制时间序列或字数直方图。这将在稍后派上用场,以便能够理解您将使用机器学习方法创建的预测/集群。Pandas 还提供了清理、聚合和重新采样数据的功能,这对于将多个时间序列(例如天气和时间序列)对齐到相同的采样率很有用。

  2. 使用优秀的在线文档中的文章和示例来熟悉 scikit-learn。使用与您的数据相关的特征提取、降维、分类和回归方法,将它们应用于较小的子集并可视化结果。了解交叉验证并找到适用于数据子集的良好算法和参数。

  3. 如果你有一个管道设置并且你想在完整的数据集上运行它,Spark 可以派上用场进行特征提取和交叉验证,因为这些任务通常可以很好地独立和并行运行。在您的机器上安装 Spark 库,并在本地模式下重现 Pyspark 示例(例如计算 Pi)。无需为此设置 Hadoop 集群,Spark 可以在本地模式下充分利用您的机器,从磁盘上的本地文件读取。一旦你开始运行,尝试将步骤 2 中昂贵的代码步骤表达为 Spark RDD 操作。由于 Spark 可以利用您机器的所有内核,您应该已经看到了加速 - 尽管与使用纯 Python 脚本相比,调试变得更加困难。

  4. 使用 word2vec 特征提取来玩一些高级的东西,比如深度学习。与传统的特征提取(词袋)相比。

  5. (可选)如果您想在分布式设置中体验从 Spark 获得的加速,请在 AWS 中获取一个帐户,将您的数据放在 S3 上并针对使用 Amazon EMR 实例化的多节点集群触发您的 Spark 脚本。

关于数据存储,根据我的经验,CSV 文件或类似的工作最好将数据加载到 Pandas 和 Spark 中。有用于数据库的 Spark 连接器(例如 Cassandra),但我不确定 MySQL 和 Solr。对于处理过的数据和中间结果(例如模型),我总是使用 Python 的序列化框架 pickle,因此您可以直接将对象实例返回到 Python 中,而无需解析文件格式和重新实例化对象。

实际上,深度学习可以使用 h2o 苏打水功能在 Spark 中运行。您也可以使用 h2o.deeplearning 对集群或单个节点中的数据运行深度学习。Spark 非常适合集群中的数据,因为它是分布式但在内存中, 否则 h2o 的数据修改功能有限,也无法分发数据修改。