我将一个装满twitter信息(json格式)的dynamodb加载到蜂箱中。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""},"created_at":{"s":"Mon Aug 07 19:36:40 +0000 2017"},"screen_name":{"s":"JessiAtkins06"},"followers_count":{"s":"19"}}
我创建的蜂箱表如下所示:
create external table table1 (
> id struct<s:string>,
> sentiment struct<s:string>,
> subjectivity struct<s:string>,
> username struct<s:string>,
> geo struct<s:string>,
> location struct<s:string>,
> polarity struct<s:string>,
> tweet struct<s:string>,
> created_at struct<s:string>,
> screen_name struct<s:string>,
> followers_count struct<s:string>)
> ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
> STORED AS TEXTFILE;
然后使用通常的"load data inpath.“从json文件加载数据。公式。
我需要从"tweet“字段中提取hashtag,但是当我尝试执行一个正则表达式来搜索hashtag时,我会得到一个错误:
hive> select regexp_extract(lower(tweet), '/\B#\w*[a-zA-Z]+\w*/',0) as patterns
> from table1
> limit 10;
FAILED: NullPointerException null
我想知道这是否是因为字段的结构格式。我本可以将发电机文件导出为csv,但是tweet中有许多逗号。无论int字段设置为0、1还是2,都会发生相同的错误。
我试图确定字段中的值是null,而且我真的不确定--我在一个由字符串类型字段组成的表上尝试了一个类似的命令,它成功了。我看过“什么是NullPointerException,以及如何修复它?”线,但仍然不知道,任何援助都将不胜感激。
发布于 2017-08-09 10:23:30
我回溯了你的脚步,也收到了NullPointerException。
接下来,我运行了一个简单的查询,得到了以下内容:
select tweet from table1;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected character ('"' (code 34)): was expecting comma to separate OBJECT entries
在示例输入数据中,您似乎有一个额外的"
(在#DemForce
之后),它破坏了json反序列化。
您可以在tweet中的每个\
之前添加"
,这样"
就会被视为文本。
如果您导出为csv,则必须事先从内容中删除所有逗号。
https://stackoverflow.com/questions/45596643
复制