首页 > 解决方案 > AWS Glue 无法读取 JSON Snappy 文件

问题描述

我在 PySpark 中使用 AWS Glue 作业读取数据时遇到问题:

数据从 AWS firehose(示例数据)发送到 s3 存储桶,存储为 JSON 并使用 snappy-hadoop 压缩。

我可以使用 spark.read.json() 从旧版 Spark 数据帧中读取数据,但这不适用于使用from_catalogfrom_options方法的 Glue 动态帧(根本不解析模式) :

Spark Legacy DataFrame

# import from legacy spark read
spark_df = spark.read.json("s3://my-bucket/sample-json-hadoop-snappy/")
spark_df.printSchema()

- result:
root
 |-- change: double (nullable = true)
 |-- price: double (nullable = true)
 |-- sector: string (nullable = true)
 |-- ticker_symbol: string (nullable = true)
 |-- year: integer (nullable = true)
 |-- dt: date (nullable = true)

粘合动态框架

# import from glue options
options_df = glueContext.create_dynamic_frame.from_options(
  connection_type="s3",
  connection_options = {"paths": ["s3://my-bucket/sample-json-hadoop-snappy/"]},
  format="json"
)
options_df.printSchema()


- result:
root

标签: pythonamazon-web-servicesapache-sparkaws-glue

解决方案


您也可以在胶水作业中使用 spark legacy,如果您只想对胶水库执行操作,然后使用 spark 读取,然后将 df 转换为动态帧。


df = spark.read.json("s3://my-bucket/sample-json-hadoop-snappy/")
from awsglue.dynamicframe import DynamicFrame
DynF = DynamicFrame.fromDF(df, glueContext, "df")

目前,仅 Glue 库中的 parquet 文件支持 snappy 压缩。


推荐阅读