0

我的分区基于年/月/日。使用 SimpleDateFormat for week year 创建了一个错误的分区。使用日期格式的 YYYY 将日期 2017-31-12 的数据移至 2018-31-12。

   SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");

所以我想要的是将我的数据从同一张表的分区 2018/12/31 移动到 2017/12/31 。我没有找到任何相关的文件来做同样的事情。

4

2 回答 2

0

有一个与该https://issues.apache.org/jira/browse/SPARK-19187相关的 JIRA 。将您的 spark 版本升级到 2.0.1 应该可以解决问题

于 2018-01-24T15:09:12.933 回答
0

据我了解,您想将数据从 2018-12-31 分区移动到 2017/12/31。以下是我对如何做到这一点的解释。

#From Hive/Beeline
ALTER TABLE TableName PARTITION (PartitionCol=2018-12-31) RENAME TO PARTITION (PartitionCol=2017-12-31);

FromSparkCode,您基本上必须启动 hiveContext 并从中运行相同的 HQL。您可以在此处参考我的回答,了解如何启动配置单元上下文。

#If you want to do on HDFS level, below is one of the approaches
#FromHive/beeline run the below HQL
ALTER TABLE TableName ADD IF NOT EXISTS PARTITION (PartitionCol=2017-12-31);

#Now from HDFS Just move the data in 2018 to 2017 partition
hdfs dfs -mv /your/table_hdfs/path/schema.db/tableName/PartitionCol=2018-12-31/* /your/table_hdfs/path/schema.db/tableName/PartitionCol=2017-12-31/

#removing the 2018 partition if you require
hdfs dfs -rm -r /your/table_hdfs/path/schema.db/tableName/PartitionCol=2018-12-31

#You can also drop from beeline/hive
alter table tableName drop if exists partition (PartitionCol=2018-12-31);

#At the end repair the table
msck repair table tableName

为什么我要修桌子??

于 2018-01-24T15:41:33.593 回答