pyspark AWS Glue -Glue Context:从S3读取分区数据,将分区添加为DynamicFrame的列

t30tvxxf  于 5个月前  发布在  Spark
关注(0)|答案(2)|浏览(61)

我有一些数据以 parquet 格式存储在一个S3桶中,遵循类似于Hive的分区方式,分区键如下:retailer - year - month - day。
Eg

my-bucket/
   retailer=a/
         year=2020/
         ....
   retailer=b/
         year=2020/
            month=2/
         ...

字符串
我想在一个sagemaker笔记本中读取所有这些数据,我想把这些分区作为DynamicFrame的列,这样当我df.printSchema()时,它们就包括在内了。
如果我使用Glue建议的方法,分区就不会包含在我的架构中。

df = glueContext.create_dynamic_frame.from_options(
    connection_type='s3',
    connection_options={
        'paths': ['s3://my-bucket/'],
        "partitionKeys": [
            "retailer",
            "year",
            "month",
            "day"
        ]
    },
    format='parquet'
)


通过使用普通的spark代码和DataFrame类,它可以正常工作,并且分区包含在我的模式中:
df = spark.read.parquet('s3://my-bucket/')的值。“
我想知道是否有办法做到这一点与AWS胶水的具体方法或没有。

exdqitrt

exdqitrt1#

也许你可以尝试抓取数据并使用from_catalog选项读取它。尽管我认为你不需要提到分区键,因为它应该看到=意味着它是一个分区。特别是考虑到glue只是spark的 Package 器

krugob8w

krugob8w2#

假设由于作业书签提供的优势,您试图将数据读取为DynamicFrame,以下是一个可能的解决方法:
1.使用Athena作为数据源,分区通过Glue Crawlers显示为列
1.将其与DynamicFrame连接到同一个表以检索分区列。

相关问题