amazon-s3 - S3 中需要用于 EMR 或 Redshift 上的机器学习的压缩数据
问题描述
我在 S3 存储中有大量压缩格式的 CSV 文件。出于机器学习的目的,我只需要数据中的一部分列。我应该如何在不传输整个文件的情况下将这些列提取到 EMR 然后到 Redshift?
我的想法是将所有文件处理成 EMR,然后提取子集并将所需的列推送到 Redshift。但这需要很多时间。如果有处理这些数据的优化方法,请告诉我。
编辑:我正在尝试使用 Kafka 自动化此管道。假设在 S3 中添加了一个新文件夹,它应该在 EMR 中使用 spark 处理并存储到 redshift 中,无需任何人工干预。
编辑 2:感谢输入人员,我能够使用 EMR 中的 Pyspark 创建从 S3 到 Redshift 的管道。目前,我正在尝试将 Kafka 集成到这个管道中。
解决方案
如果目标是在 Redshift 的表中实现文件列的子集,那么您可以选择 Redshift Spectrum,它允许您在 S3 中的 CSV 文件上定义“外部表”。
然后,您可以从外部表中选择相关列并将它们插入到实际的 Redshift 表中。
当 Spectrum 扫描 CSV 文件以查询它们时,您将遇到初始成本损失,这将根据文件的大小而有所不同,但这可能比启动 EMR 集群来处理数据要少得多。
推荐阅读
- sql-server - 如何在 xml 查询中不返回空元素
- python - 为什么 GridSearchCV 方法的准确性低于标准方法?
- swift - 如何删除位置?
- xml - 如何使用 VB.net 将 .xml 银行对帐单转换为 .csv tex 文件?
- google-chrome - Chrome 中的 WebRTC 屏幕共享质量
- java - Runtime.getRuntime().availableProcessors() 在 Container-Optimized OS 上总是返回 1
- bash - 当用户与 ssh 断开连接时如何运行脚本
- java - 有什么方法可以在 Mockito 中使用 TestNG 进行超时验证
- simplex - 单纯形算法 - 最坏情况
- python-3.x - 如何使用 2 个列表并将值合并到一个字典中