我在亚马逊上有一个DynamoDB,其中包含一堆包含相关数据(用户,位置等)的推文。我通过管道导出了这个并获得了一个json文件。 将其导出到csv将是一个坏主意,因为许多推文在文本字段中包含逗号。作为Hive的新手,我至少知道要加载一个json文件,我需要某种SerDe。
这就是我创建表格的方式:
create external table tablename (
id string,
created_at string,
followers_count string,
geo string,
location string,
polarity string,
screen_name string,
sentiment string,
subjectivity string,
tweet string,
username string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
SAVE AS TEXTFILE ;
我没有收到任何错误,但接下来我做了:
load data inpath '/user/exam'
overwrite into table tablename;
(这是存储json文件的地方)
当我做" select * from tablename limit 5;
"一切都出现了NULL:
hive> select * from wcd.tablename limit 5;
OK
{ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
{ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
{ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
{ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
{ NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
如果有人想查看相关文件,请访问:
http://www.vaughn-s.net/hadoop
非常感谢任何帮助!
答案 0 :(得分:2)
原因是因为你的json没有遵循你的表定义
{"id":{"s":"894643473017561088"},"sentiment":{"s":"neutral"},"subjectivity":{"s":"0.0"},"username":{"s":"Jessi"},"geo":{"s":"None"},"location":{"s":"Valley of the sun☀ï¸"},"polarity":{"s":"0.0"},"tweet":{"s":"b\"RT @bannerite: Donald Trump's lies have consequences. We're seeing them now | Charlotte Observer #DemForce https""},"created_at":{"s":"Mon Aug 07 19:36:40
+0000 2017"},"screen_name":{"s":"JessiAtkins06"},"followers_count":{"s":"19"}}
尝试将每列添加一个带有s字符串的结构,例如
id struct<s:string>