hdfs中复制分区的最佳方法

6psbrbz9  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(400)

所以,我有一个用例,我想复制表的最后一个分区,并用新的分区列值将它插入到同一个表中。
需要注意的是,最后一个分区值总是已知的。
我可以想出两种方法
得到 where partitionColumn = partitionValue 在一个 DataFrame 并使用 .withColumn 然后 saveAsTable 然后执行失效/刷新
或者,
复制 parquet 最后一个分区目录中的文件
创建新分区,将其粘贴到新目录中 /newPatritionValue/ 最后
粘贴Parquet文件
ALTER TABLE 哪个跑得更快?

hfsqlsce

hfsqlsce1#

我认为方法1会有一些额外的开销。spark可能会尝试以不同的方式写入文件(可能是文件数或压缩,甚至是一些模式修改),因为从它的Angular 来看,您正在读取一个数据集,然后输出另一个数据集。
使用方法2,您只需将文件复制到另一个文件夹,复制后的数据将完全相同。你甚至可以替换你的 ALTER TABLE .. ADD PARTITION .. LOCATION ..MSCK REPAIR TABLE .. ,它将使您的代码更干净,因为传递的参数更少。
你(和你的团队)的偏好也很重要。如果您的所有工作流都已经在spark中,那么从长远来看,添加其他类型的作业会造成更大的危害。

相关问题