s3 存储桶中的分区数据格式

Posted

技术标签:

【中文标题】s3 存储桶中的分区数据格式【英文标题】:Partitioned data format in s3 bucket 【发布时间】:2020-11-25 04:31:51 【问题描述】:

在以分区格式将数据写入 S3 存储桶时,文件夹被创建为year=2020/Month=10

我想要名为year2020/Month10的文件夹

【问题讨论】:

为什么要这样命名文件夹? spark 不提供重命名分区文件夹的选项。这是预期和期望的行为。 我们收到相同格式的原始分区文件(year2020/month10),因此我们希望在每个桶中保持相同的结构 我在任何地方都找不到任何关于 Spark 中自定义分区的信息。如果您发现了什么,请自行回答这个问题。 spark.apache.org/docs/2.4.0/… 【参考方案1】:

如果您以 static partitions 而不是 dynamic partitions 的身份加载,那么您可以获得预期的输出。

Example:

df=spark.createDataFrame([(1,'a','2020','10'),(2,'b','2020','10')],['id','name','year','month'])

from pyspark.sql.functions import *

df.show()
#+---+----+----+-----+
#| id|name|year|month|
#+---+----+----+-----+
#|  1|   a|2020|   10|
#|  2|   b|2020|   10|
#+---+----+----+-----+

#get year,hour value and assign to variable
year=df.select("year").collect()[0][0]
month=df.select("month").collect()[0][0]

#we are going to create directories 
df.write.format("parquet").mode("overwrite").save(f"yearyear/monthmonth")
#year2020/month10/parquet files

【讨论】:

以上是关于s3 存储桶中的分区数据格式的主要内容,如果未能解决你的问题,请参考以下文章

寻找在 S3 存储桶中复制 oracle 表的最佳方法

BigQuery 中的 Hive 分区 LAYOUT 表格式

如何(批量)删除Amazon S3存储桶中几百个文件的列表

从 S3 存储桶中读取大量 CSV 文件

使用 aws lambda node js 获取存储在 s3 存储桶中的视频的视频元数据

如何从一个账户访问 s3 存储桶中的数据以在另一个账户中使用 redshift 处理数据?