配置单元:使用csv文件中的struct数组创建表,其中所有内容都用逗号分隔

toe95027  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(285)

我有一个带有结构数组的csv文件,其中所有内容都由','分隔。在id字段之后,数据包含x、y和z坐标的三元组数组。

ID, X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,...
1,1,2,3,4,5,6,7,8,9
2,4,5,6,7,8,9
3,10,11,12
4,15,16,17,18,19,20,25,26,27

我尝试使用下面的代码来创建配置单元表,如果我的字段、集合项和Map键用不同的字符定义,该表就可以工作了。但是,由于所有内容都用逗号分隔,因此失败。想知道这种情况是否有其他解决办法。

CREATE TABLE IF NOT EXISTS Hivetable (
   ID              INT,
   XYZ             array<STRUCT<X:DOUBLE, Y:DOUBLE, Z:DOUBLE>>
)
row format delimited                                                                                       
fields terminated by ','   
collection items terminated by ',' 
map keys terminated by ',' 
stored as textfile 
;

LOAD DATA local INPATH 'Path/datafile.csv' OVERWRITE INTO TABLE Hivetable;
bd1hkmkf

bd1hkmkf1#

scv文件输入应为:

1,1;2;3#4;5;6#7;8;9
2,4;5;6#7;8;9

表创建:

CREATE TABLE IF NOT EXISTS Hivetable (

   ID              INT,

   XYZ             array<STRUCT<X:DOUBLE, Y:DOUBLE, Z:DOUBLE>> 

)
ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',' 

COLLECTION ITEMS TERMINATED BY '#' 

MAP KEYS TERMINATED BY ';' 

LINES TERMINATED BY '\n' 

STORED AS 

INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 

OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'

输出:

select * from Hivetable

1 [{"X":1,"Y":2,"Z":3},{"X":4,"Y":5,"Z":6},{"X":7,"Y":8,"Z":9}]

相关问题