amazon-web-services - AWS 胶水 : ETL to read S3 CSV files

标签 amazon-web-services amazon-s3 etl aws-glue

我想使用 ETL 从 S3 读取数据。由于使用 ETL 作业,我可以设置 DPU 以加快速度。

但是我该怎么做呢?我试过

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

inputGDF = glueContext.create_dynamic_frame_from_options(connection_type = "s3", connection_options = {"paths": ["s3://pinfare-glue/testing-csv"]}, format = "csv")
outputGDF = glueContext.write_dynamic_frame.from_options(frame = inputGDF, connection_type = "s3", connection_options = {"path": "s3://pinfare-glue/testing-output"}, format = "parquet")

但是好像什么都没写。我的文件夹看起来像:

enter image description here

什么不正确?我的输出 S3 只有一个文件,如:testing_output_$folder$

最佳答案

我相信这里的问题是您在 testing-csv 文件夹中有子文件夹,因为您 没有指定递归 确实,Glue 无法在 2018-09-26 子文件夹(或实际上任何其他子文件夹)中找到文件。

您需要添加递归选项如下

inputGDF = glueContext.create_dynamic_frame_from_options(connection_type = "s3", connection_options = {"paths": ["s3://pinfare-glue/testing-csv"], "recurse"=True}, format = "csv")

此外,关于您在评论中关于爬虫的问题,它们有助于推断您的数据文件的架构。因此,在您的情况下,这里什么也不做,因为您是直接从 s3 创建 dynamicFrame 的。

关于amazon-web-services - AWS 胶水 : ETL to read S3 CSV files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53104036/

相关文章:

machine-learning - Kafka 流的最佳实践

amazon-web-services - 无法将负载均衡器与目标组关联

amazon-web-services - AWS lambda list-functions仅过滤出函数名称?

php - 使用适用于 PHP 的 AWS 开发工具包以编程方式将文件夹添加到 S3

c# - 如何列出 Amazon S3 存储桶中的所有对象?

amazon-web-services - 使用 Java SDK 访问 AWS Transcribe 作业的结果

amazon-web-services - 如何在 Amazon Redshift 上执行预定的 SQL 脚本?

sql - 删除表忽略 PostgreSQL 中的依赖项?

amazon-web-services - 如何在没有 AWS 的情况下在私有(private)网络中运行 Amazon Echo

sql-server - SSIS 派生列表达式根据单独 OLE DB 源中另一个字段的值显示空白