【问题标题】:Zipped Data in S3 that needs to be used for Machine Learning on EMR or RedshiftS3 中需要用于 EMR 或 Redshift 上的机器学习的压缩数据
【发布时间】:2019-08-09 01:31:40
【问题描述】:

我在 S3 存储中有大量压缩格式的 CSV 文件。出于机器学习的目的,我只需要数据中的一部分列。我应该如何在不传输整个文件的情况下将这些列提取到 EMR 中,然后再提取到 Redshift?

我的想法是将所有文件处理成 EMR,然后提取子集并将所需的列推送到 Redshift。但这需要很多时间。如果有处理这些数据的优化方法,请告诉我。

编辑:我正在尝试使用 Kafka 自动化此管道。假设在 S3 中添加了一个新文件夹,它应该在 EMR 中使用 spark 处理并存储到 redshift 中,无需任何人工干预。

编辑 2:感谢各位提供意见,我能够使用 EMR 中的 Pyspark 创建从 S3 到 Redshift 的管道。目前,我正在尝试将 Kafka 集成到此管道中。

【问题讨论】:

  • 如果您对 python / r / spark 感到满意,您可以在 EMR 中进行操作。我相信对于 ML,您无论如何都需要将数据加载到 EMR 或 EC2 中。

标签: amazon-s3 amazon-redshift amazon-emr


【解决方案1】:

我建议:

  • 在 Amazon Athena 中创建一个外部表(AWS Glue 爬虫可以为您执行此操作),指向您的数据的存储位置
  • 使用CREATE TABLE AS 选择所需的列并将它们存储在新表中(数据自动存储在 Amazon S3 中)

Amazon Athena 可以处理 gzip 格式,但您必须检查这是否包括 zip 格式。

见:

【讨论】:

  • 感谢您的回答,但我正在尝试自动化此管道。假设在 S3 中添加了一个新文件夹,它应该被处理并存储到 redshift 中,而无需任何人工干预。
【解决方案2】:

如果目标是在 Redshift 的表中具体化文件列的子集,那么您可以选择 Redshift Spectrum,它允许您在 S3 中的 CSV 文件上定义“外部表”。

然后您可以从外部表中选择相关列并将它们插入到实际的 Redshift 表中。

当 Spectrum 扫描 CSV 文件以查询它们时,您会遇到初始成本损失,这取决于文件的大小,但这可能比启动 EMR 集群来处理数据要少得多。

Getting Started with Amazon Redshift Spectrum

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2017-04-20
    • 2018-11-12
    • 2019-09-23
    • 1970-01-01
    • 2017-11-25
    • 2021-12-06
    • 2018-01-18
    • 2016-04-21
    相关资源
    最近更新 更多