【发布时间】:2019-12-22 12:26:06
【问题描述】:
我有过去 5 年的 monthly 收入数据,并且我在 append 模式下以 parquet 格式存储各个月份的数据帧,但 partitioned by month 列。这是下面的伪代码 -
def Revenue(filename):
df = spark.read.load(filename)
.
.
df.write.format('parquet').mode('append').partitionBy('month').save('/path/Revenue')
Revenue('Revenue_201501.csv')
Revenue('Revenue_201502.csv')
Revenue('Revenue_201503.csv')
Revenue('Revenue_201504.csv')
Revenue('Revenue_201505.csv')
df 每月以parquet 格式存储,如下所示 -
问题:如何删除特定月份对应的parquet文件夹?
一种方法是将所有这些parquet 文件加载到一个大的df 中,然后使用.where() 子句过滤掉该特定月份,然后将其保存回parquet 格式partitionBy 月份@ 987654341@模式,像这样-
# If we want to remove data from Feb, 2015
df = spark.read.format('parquet').load('Revenue.parquet')
df = df.where(col('month') != lit('2015-02-01'))
df.write.format('parquet').mode('overwrite').partitionBy('month').save('/path/Revenue')
但是,这种方法相当麻烦。
另一种方法是直接删除该特定月份的文件夹,但我不确定这是否是正确的处理方式,以免我们以不可预见的方式更改metadata。
删除特定月份的parquet 数据的正确方法是什么?
【问题讨论】:
-
如果您稍后选择,这里有一个很好的讨论链接,但这不是您原始问题的答案。贴出来仅供参考。 stackoverflow.com/questions/38318513/…
-
@vikrantrana 非常感谢 Vikrant 向我推荐该链接。让我试着理解它。
-
请看下面的答案。它可以作为指向您原始问题的指针。您必须根据镶木地板格式或分区列进行少量更改。如果您找到使用 spark 函数的方法,也请告诉我。
-
看来这个问题已经争论了很久了。不太确定,但可能是。 stackoverflow.com/questions/48090352/…
标签: python apache-spark pyspark parquet