Eu estou lendo uma linha json
dados do Twitter em uma Tabela Externa do Hive. A tabela é criada, mas ao ler os dados, recebo um erro. Eu quero ler as hashtags. Eu segui os passos abaixo:
hive (test)> add jar /usr/lib/hive/lib/hive-serdes-1.0-SNAPSHOT.jar;
Added /usr/lib/hive/lib/hive-serdes-1.0-SNAPSHOT.jar to class path
Added resource: /usr/lib/hive/lib/hive-serdes-1.0-SNAPSHOT.jar
Dados no arquivo:
hive (test)> dfs -cat abhijit_hdfs/flume2/tweets/Twitter_test.js;
"entities":{"symbols":[],"urls":[],"hashtags":[{"text":"AchieveMore","indices":[56,68]}]}
Declaração DDL
hive (test)> create external table tt4
> (entities struct<hashtags:array<struct<text:string>>>)
> row format serde "com.cloudera.hive.serde.JSONSerDe"
> LOCATION "/user/training/abhijit_hdfs/flume2/tweets/" ;
OK
Time taken: 0.193 seconds.
hive (test)> select * from tt4;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.LinkedHashMap out of VALUE_STRING token
at [Source: java.io.StringReader@1cc892e; line: 1, column: 1]
Time taken: 0.384 seconds
Por favor guie.
Respostas:
0 para resposta № 1Isso parece um problema não relacionado ao Hadoop ou ao hive e, em vez disso, um erro de serializador JSON no qual o serde para o qual você está apontando usa org.codehaus.jackson
Ao tentar o JSON parece ter esse erro
`Error: Parse error on line 1:"entities":{"symbols":[],"urls
----------^
Expecting "EOF", "}", ",", "]", got ":"`
Eu não tentei a configuração toda, mas o JSON parece estar perdendo um {no início para ser um bom JSON parsable
{"entities":{"symbols":[],"urls":[],"hashtags":[{"text":"AchieveMore","indices":[56,68]}]}}
0 para resposta № 2
Caros amigos este problema está resolvido Eu baixei e salvei o seguinte jar e reiniciei a minha claudera VM (uso não comercial) .Obrigado por sua ajuda que me deu direção para resolvê-lo.
hive> add jar /usr/lib/hive/lib/json-serde-1.3.6-jar-with-dependencies.jar;
Added /usr/lib/hive/lib/json-serde-1.3.6-jar-with-dependencies.jar to class path
Added resource: /usr/lib/hive/lib/json-serde-1.3.6-jar-with-dependencies.jar
hive> create external table t24
(entities struct<hashtags:array<struct<text:string>>>) row format serde "org.openx.data.jsonserde.JsonSerDe" LOCATION "/user/training/abhijit_hdfs/flume4/tweets/" ; OK
Time taken: 1.623 seconds hive> select * from t24; OK {"hashtags":[{"text":"AchieveMore"}]} null Time taken: 1.13 seconds hive>
0 para resposta № 3
Funciona depois de adicionar os suportes de curvatura circundantes ({...}
), ao usar o hcatalog JsonSerDe
create external table tt4
(
entities struct<hashtags:array<struct<text:string>>>
)
row format serde "org.apache.hive.hcatalog.data.JsonSerDe"
;
select * from tt4
;
+---------------------------------------+
| entities |
+---------------------------------------+
| {"hashtags":[{"text":"AchieveMore"}]} |
+---------------------------------------+
O JsonSerDe para arquivos JSON está disponível no Hive 0.12 e posterior.
Em algumas distribuições, uma referência a hive-hcatalog-core.jar é requeridos. ADICIONAR JAR /usr/lib/hive-hcatalog/lib/hive-hcatalog-core.jar;
...
O JsonSerDe foi movido para o Hive do HCatalog e antes dele projeto hive-contrib. Foi adicionado à distribuição Hive por HIVE-4895.