我们目前使用 Redshift 作为我们的数据仓库,对此我们非常满意。但是,我们现在需要对仓库中的数据进行机器学习。考虑到所涉及的数据量,理想情况下,我希望在与数据相同的位置运行计算,而不是移动数据,但这对于 Redshift 来说似乎是不可能的。我看过 MADlib,但这不是一个选项,因为 Redshift 不支持 UDF(MADlib 需要)。我目前正在考虑将数据转移到 EMR 并使用 Apache Spark 机器学习库(或者可能是 H20、Mahout 或其他)对其进行处理。所以我的问题是:
- 有没有更好的办法?
- 如果没有,我应该如何让 Spark 可以访问数据?到目前为止,我已经确定的选项包括:使用 Sqoop 将其加载到 HDFS、使用 DBInputFormat、将 Redshift 导出到 S3 并让 Spark 从那里抓取它。使用 Spark 时,这些不同方法(以及任何其他方法)的优缺点是什么?
请注意,这是离线批量学习,但我们希望能够尽快完成此操作,以便我们可以快速迭代实验。