不能让hive接受json文件

时间:2015-05-08 06:54:10

标签: json hive

我正在关注一个简​​单的hive json serde教程,但是无法接受一个看起来完全正确的json文件。

{
"id": 596344698102419456,
"created_at": "MonApr0101: 32: 06+00002013",
"source": "<ahref="http: //google.com"rel="nofollow">RihannaQuotes</a>",
"favorited": False
}

CREATE EXTERNAL TABLE tweets (
id BIGINT,
created_at STRING,
source STRING,
favorited BOOLEAN
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/user/flume/tweets';

加载数据后,它表示有0行 表default.tweets stats:[numFiles = 1,numRows = 0,totalSize = 166,rawDataSize = 0]

select * from tweets;因异常而失败

  

java.io.IOException的:org.apache.hadoop.hive.serde2.SerDeException:   org.codehaus.jackson.JsonParseException:意外的输入结束:   OBJECT的预期关闭标记(来自:   java.io.StringReader@45377ac1; line:1,column:0])at [来源:   java.io.StringReader@45377ac1; line:1,column:3]

我做错了吗?

3 个答案:

答案 0 :(得分:6)

所有这一切,你必须将整个记录放在一行上,没有嵌入\ n。

{ "id": 596344698102419456, "created_at": "MonApr0101: 32: 06+00002013", "source": "blank", "favorited": false }

这就像一个魅力。

答案 1 :(得分:1)

问题在于Json的这一部分:

"source": "<ahref="http: //google.com"rel="nofollow">RihannaQuotes</a>",

从Json解析的角度来看,该字段的值在第二个引号处结束,即它正在解释:

"source": "<ahref="

其余的是&#34;垃圾&#34;。任何在线解析器都会确认这一点。

您必须以这种方式转义脚本中的引号:

{
    "id": 596344698102419456,
    "created_at": "MonApr0101: 32: 06+00002013",
    "source": "<a href=\"http://google.com\"rel=\"nofollow\">RihannaQuotes</a>",
    "favorited": false
}

答案 2 :(得分:0)

我更换了Serde并成功了

例如:

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("ignore.malformed.json" = "true")