Tengo problemas para leer datos con un trabajo de AWS Glue en PySpark:
Los datos se envían desde un firehose de AWS (datos de muestra) a un depósito s3, se almacenan como JSON y se comprimen con snappy-hadoop.
Puedo leer datos del marco de datos heredado de Spark con spark.read.json() pero esto no funcionará con Glue Dynamic Frame (el esquema no se analiza en absoluto) usando el método from_catalog o from_options :
Marco de datos heredado de Spark
# 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)Pegamento DynamicFrame
# 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: rootTambién puede usar Spark Legacy en el trabajo de pegamento y si desea realizar operaciones en bibliotecas de pegamento solo, lea usando Spark y luego convierta el df en un marco dinámico.
df = spark.read.json("s3://my-bucket/sample-json-hadoop-snappy/") from awsglue.dynamicframe import DynamicFrame DynF = DynamicFrame.fromDF(df, glueContext, "df")Actualmente, la compresión rápida es compatible con archivos de parquet solo en Glue libs.