use*_*287 1 etl amazon-web-services aws-glue aws-glue-data-catalog
目前的设置:
带有 json 文件的 S3 位置。所有文件存储在同一位置(无日/月/年结构)。
Glue Crawler 读取目录表中的数据
我想要实现的是按天 (1) 分区的镶木地板表和 1 天的镶木地板表在同一个文件 (2) 中。目前,每个 json 文件都有一个镶木地板表。
我该怎么办?
值得一提的是,数据中有一个 datetime 列,但它是一个 unix 纪元时间戳。我可能需要将其转换为“年/月/日”格式,否则我假设它会再次为每个文件创建一个分区。
非常感谢你的帮助!!
将Glue的DynamicFrame转化为Spark的DataFrame,添加年/月/日列并重新分区。将分区减少到一个将确保只有一个文件会被写入一个文件夹,但这可能会降低作业性能。
这是python代码:
from pyspark.sql.functions import col,year,month,dayofmonth,to_date,from_unixtime
...
df = dynamicFrameSrc.toDF()
repartitioned_with_new_columns_df = df
.withColumn(“date_col”, to_date(from_unixtime(col(“unix_time_col”))))
.withColumn(“year”, year(col(“date_col”)))
.withColumn(“month”, month(col(“date_col”)))
.withColumn(“day”, dayofmonth(col(“date_col”)))
.drop(col(“date_col”))
.repartition(1)
dyf = DynamicFrame.fromDF(repartitioned_with_new_columns_df, glueContext, "enriched")
datasink = glueContext.write_dynamic_frame.from_options(
frame = dyf,
connection_type = "s3",
connection_options = {
"path": "s3://yourbucket/data”,
"partitionKeys": [“year”, “month”, “day”]
},
format = “parquet”,
transformation_ctx = "datasink"
)
Run Code Online (Sandbox Code Playgroud)
请注意,from pyspark.qsl.functions import col可以给出参考错误,这不应该是这里解释的问题。
| 归档时间: |
|
| 查看次数: |
7940 次 |
| 最近记录: |