在复杂的镶木地板文件上创建蜂巢表

时间:2015-03-16 18:09:14

标签: json hive apache-spark apache-spark-sql parquet

我正在尝试将蜂巢桌放在我根据以下json内容创建的镶木桌上: {" USER_ID":" 4513""商":[{" ID":" 4220"&# 34;名称":" dbmvl""行为" {" B1":" gxybq"" B2&# 34;:" ntfmx"}},{" ID":" 4173""名称":" dvjke" "行为" {" B1":" sizow"" B2":" knuuc"}}]}

{" USER_ID":" 3960""商":[{" ID":&#34 ; 1859""名称":" ponsv""行为" {" B1":" ahfgc&#34 ;," B2":" txpea"}},{" ID":" 103""名称&#34 ;: " uhqqo""行为" {" B1":" lktyo"" B2":" ituxy"}}]}

{" USER_ID":" 567""商":[{" ID":&#34 ; 9622""名称":" crjju""行为" {" B1":" rhaqc&#34 ;," B2":" npnot"}},{" ID":" 6965""名称&#34 ;: " fnheh""行为" {" B1":" eipse"" B2":" nvxqk"}}]}

我基本上使用spark sql来读取json并写出一个镶木地板文件。

我遇到了将蜂巢放在生产的镶木地板文件上的问题。这是我的hive hql:
create table test (mycol STRUCT<user_id:String, providers:ARRAY<STRUCT<id:String, name:String, behaviors:MAP<String, String>>>>) stored as parquet; Alter table test set location 'hdfs:///tmp/test.parquet'; 上面的语句执行正常,但是当我尝试在表上执行select *时出现错误:
异常java.io.IOException失败:java.lang.IllegalStateException:{providers = providers,user_id = user_id}

中不存在索引0处的列mycol

1 个答案:

答案 0 :(得分:1)

尝试将您的查询更改为:

create table test (user_id:String, providers:ARRAY<STRUCT<id:String, name:String, behaviors:MAP<String, String>>>) stored as parquet;

存储Parquet文件时,根JSON对象会变平。