在hive中加载数据时出现架构问题

时间:2018-03-23 08:11:27

标签: apache-spark hive hiveql

这是我的json文件

{ "reviewerID": "A10000012B7CGYKOMPQ4L", "asin": "000100039X", "reviewerName": "Adam", "helpful": [0, 0], "reviewText": "Spiritually and mentally inspiring! A book that allows you to question your morals and will help you discover who you really are!", "overall": 5.0, "summary": "Wonderful!", "unixReviewTime": 1355616000, "reviewTime": "12 16, 2012" }

我用来创建表的代码

scala> hc.sql("create table books (reviewerID string, asin string ,reviewerName string , helpful array<int>, reviewText string, overall int, summary string,unixReviewTime string,reviewTime string)row format delimited fields terminated by ','")

hc.sql("select * from books").show()

output from select *

这里有&#34;有用的数据&#34;专栏正在进入&#34; reviewText&#34;干扰其他列也是如此,这样的json文件的正确模式也可以显示[reviewerID&#34;:&#34; A10000012B7CGYKOMPQ4L]代替指定列中的[A10000012B7CGYKOMPQ4L]

1 个答案:

答案 0 :(得分:0)

子句 行格式分隔 的含义是 - 加载文件中的每个字段用分隔符分隔,其含义为 - 以',' 结尾的字段是 - 加载文件中的分隔符','。

因此,您创建的表以下列方式解释文件中的字段 - 从行的开头直到遇到','作为第一个字段并从第一个字段的结尾开始直到它遇到另一个','作为第二个字段等等。

第一场 - &gt; {“reviewerID”:“A10000012B7CGYKOMPQ4L”

第二场 - &gt; “asin”:“000100039X”

第4场 - &gt; “乐于助人”:[0

第五场 - &gt; 0]

第6场 - &gt; “reviewText”:“精神上和精神上鼓舞人心!一本书,让你质疑你的道德,并帮助你发现你的真实面目!”

如果你想创建一个解释json输入的hive表,你必须使用JSON serde。

例如:

create table <table_name>(col1 data_type1, col2 data_type2, ....)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS TEXTFILE

您可以通过以下链接查看详细示例。

loading-json-file-in-hive-table