我想在我的 AWS Glue ETL 作业中处理 JSON 文件。
解决方法
将 JSON 文件转换为其他格式
要将 JSON 文件转换为其他格式,请使用 Visual ETL 创建 AWS Glue ETL 作业。对于 Data source(数据源),选择 JSON。对于 Data target(数据目标),选择新的文件格式。选择 S3 作为 Data source(数据来源)和 Data target(数据目标)的 Node type(节点类型)。
创建 JSON 分类器来读取嵌套的 JSON 数据
如果您的 AWS Glue 爬网程序必须读取嵌套列,请[创建定义为 JSON 分类器的自定义分类器](https://docs.aws.amazon.com/glue/latest/dg/console-classifiers.html)。然后,创建新的 AWS Glue 爬网程序。将自定义 JSON 分类器添加到新 AWS Glue 爬网程序的分类器列表中。
在 AWS Glue ETL 作业中,使用关系化将嵌套的 JSON 列转换为列。您还可以在您的 AWS Glue ETL 作业配置的格式选项值中使用 jsonPath 选项。有关代码示例,请参阅示例: 从 Amazon Simple Storage Service (Amazon S3) 读取 JSON 文件或文件夹。
使用 unnest 选项将嵌套字段转换为顶层对象。
使用 AWS Glue 爬网程序解析 JSON 数组
默认情况下,AWS Glue 爬网程序将数据视为单个数组。要创建基于 JSON 数组中每条记录的架构,请创建 JSON 自定义分类器。对于 JSON path(JSON 路径),输入 $[*]
当您使用 AWS Glue ETL 作业读取 JSON 数组时,使用 Apache Spark 中的 explode 函数将数组转换为行。有关详细信息,请参阅 Spark 网站上的 pyspark.sql.functions.explode。
您还可以使用 Spark 中的 to_json 函数将数组转换为字符串。有关详细信息,请参阅 Spark 网站上的 pyspark.sql.functions.to_json。
对与数据来源中的记录数不匹配的 DynamicFrame 计数问题进行故障排除
如果您的 DynamicFrame 计数与 JSON 数据来源中的记录数不匹配,则该数据包含格式错误的记录。运行以下 errorsAsDynamicFrame 命令在数据集中查找格式错误的记录:
# View error fields and error data
error_record = dynamicframe_df.errorsAsDynamicFrame().toDF().head()
将多行值设置为读取包含多行的 JSON 记录
如果您的 JSON 记录跨越多行,请将 AWS Glue ETL 作业配置的格式选项中的 multiline 值设置为 true。默认情况下,multiline 值设置为 false。