我正在尝试将蜂巢桌放在我根据以下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 :(得分:1)
尝试将您的查询更改为:
create table test (user_id:String, providers:ARRAY<STRUCT<id:String, name:String, behaviors:MAP<String, String>>>) stored as parquet;
存储Parquet文件时,根JSON对象会变平。