apache-spark - 分区的 ORC 表在 Hive 中显示为空
问题描述
我已经将 Spark 数据框写入分区ORC
文件,如下所示:
df.repartition("LOADED")\
.write\
.partitionBy("LOADED")\
.format("orc")\
.save("location")
一切都在磁盘上正确。之后,我想从中创建一个 Hive 表,例如:
CREATE TABLE table USING ORC LOCATION 'location'
该命令运行没有任何错误。但是,如果我尝试查询该表,它是空的。
我试过在不分区的情况下做同样的事情,它工作得很好。我究竟做错了什么?分区文件夹如下所示:LOADED=2019-11-16
供参考:我想将数据写入 Azure Blob 存储,并在不同的集群中从中创建 Hive 表。
解决方案
在这种情况下,您正在将数据直接写入location
非 hiveQL 语句,我们需要使用以下命令从 hive/spark 更新 hive 表的元数据:
msck repair table <db_name>.<table_name>;
(或者)
alter table <db_name>.<table_name> add partition(`LOADED`='<value>') location '<location_of the specific partition>';
然后运行以下命令列出表中的分区:
show partitions <db_name>.<table_name>;
推荐阅读
- c++ - 为后台任务设置 CPU Affinity 并阻止 CPU 使用
- python - 在python中将字符串日期转换为long
- python - OpenAI Gym + WSL2 + VcXsrv 移动窗口问题
- javascript - 在单组件苗条中导入传单
- apache-spark - 将值重置为配置“spark.executor.instances”
- if-statement - 根据所选选项增加 2 个不同的 ID
- html - 为什么缩小屏幕时会自动弹出移动版导航栏?
- c# - 由于错误 CS0111,无法正确编写我的代码
- kubernetes - 从我的 localhost 到 GKE 运行“kubectl”命令 - 但通过堡垒主机的隧道
- javascript - 如何在javascript中使用带有eval()函数的异步等待?