【发布时间】:2020-09-17 04:00:52
【问题描述】:
我的 S3 存储桶中有大量数据,由 MODULE 和 DATE 两列分区
这样我的镶木地板的文件结构是:
s3://my_bucket/path/file.parquet/MODULE='XYZ'/DATE=2020-01-01
我有 7 个MODULE,DATE 的范围从 2020-01-01 到 2020-09-01。
我发现数据存在差异,需要更正其中一个模块的 MODULE 条目。基本上我需要将属于MODULEXYZ 的特定索引号的所有数据更改为MODULEABC。
我可以在 pyspark 中通过加载数据框并执行以下操作来做到这一点:
df=df.withColumn('MODULE', when(col('index')==34, "ABC").otherwise(col('MODULE')))
但是我该如何重新分区,以便只有那些被更改的条目才能移动到ABC MODULE 分区?如果我这样做:
df.mode('append').partitionBy('MODULE','DATE').parquet(s3://my_bucket/path/file.parquet")
我会将数据与错误的MODULE 数据一起添加。另外,我有将近一年的数据,不想重新分区整个数据集,因为这需要很长时间。
有没有办法做到这一点?
【问题讨论】:
-
您可以使用
input_file_name函数来识别您需要更改的文件,因此,您可以只覆盖这些特定文件而不是整个数据。这只是一个想法。
标签: amazon-s3 pyspark parquet hadoop-partitioning