hadoop - Chargement du fichier JSON avec serde à Cloudera




hive apache-pig (2)

J'essaye de travailler avec un fichier JSON avec cette structure de sac:

{
   "user_id": "kim95",
   "type": "Book",
   "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.",
   "year": "1995",
   "publisher": "ACM Press and Addison-Wesley",
   "authors": [
      {
         "name": "null"
      }
   ],
   "source": "DBLP"
}
{
   "user_id": "marshallo79",
   "type": "Book",
   "title": "Inequalities: Theory of Majorization and Its Application.",
   "year": "1979",
   "publisher": "Academic Press",
   "authors": [
      {
         "name": "Albert W. Marshall" 
      },
      {
         "name": "Ingram Olkin"
      }
   ],
   "source": "DBLP"
}

J'ai essayé d'utiliser serde pour charger les données JSON pour Hive. J'ai suivi les deux chemins que j'ai vus ici: http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/

Avec ce code:

CREATE EXTERNAL TABLE IF NOT EXISTS serd (
           user_id:string, 
           type:string, 
           title:string,
           year:string,
           publisher:string,
           authors:array<struct<name:string>>,
           source:string)       
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION '/user/hdfs/data/book-seded_workings-reduced.json';

J'ai eu cette erreur:

error while compiling statement: failed: parseexception line 2:17 cannot recognize input near ':' 'string' ',' in column type

J'ai alson essayé cette version: https://github.com/rcongiu/Hive-JSON-Serde

qui a donné une erreur différente:

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.openx.data.jsonserde.JsonSerde

Une idée?

Je veux aussi savoir quelles sont les alternatives à travailler avec un JSON comme celui-ci pour faire des requêtes sur le champ 'name' dans 'authors'. Que ce soit le porc ou la ruche?

Je l'ai déjà converti en un fichier "tsv". Mais, puisque la colonne de mes auteurs est un tuple, je ne sais pas comment faire des requêtes sur 'name' avec Hive, Si je construis une table à partir de ce fichier. Dois-je changer mon script pour la conversion "tsv" ou le garder? Ou y a-t-il des alternatives avec Hive ou Pig?


Hive n'a pas de support intégré pour JSON. Donc, pour utiliser JSON avec Hive, nous devons utiliser des fichiers tiers comme: https://github.com/rcongiu/Hive-JSON-Serde

Vous avez quelques problèmes avec l'instruction create table. Ça devrait ressembler à ça:

CREATE EXTERNAL TABLE IF NOT EXISTS serd ( 
user_id string,type string,title string,year string,publisher string,authors array<string>,source:string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION...

Les enregistrements JSON que vous utilisez conservent chaque enregistrement sur une seule ligne comme ceci:

{"user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": "ACM Press and Addison-Wesley", "authors": [{"name":"null"}], "source": "DBLP"} 
{"user_id": "marshallo79", "type": "Book", "title": "Inequalities: Theory of Majorization and Its Application.", "year": "1979", "publisher": "Academic Press","authors": [{"name":"Albert W. Marshall"},{"name":"Ingram Olkin"}], "source": "DBLP"}

Après avoir téléchargé le projet depuis GIT, vous devez compiler le projet qui créera un jar dont vous avez besoin pour ajouter ce jar dans la session Hive avant d'exécuter l'instruction create table.

J'espère que cela aide...!!!


ajouter jar seulement ajouter à la session qui ne sera pas disponible et enfin il devient erreur. Obtenez le fichier JAR chargé sur tous les nœuds du chemin Hive et Map Reduce, comme dans l'emplacement ci-dessous, afin que le composant HIVE et Map Reduce sélectionne ce dernier chaque fois qu'il est appelé.

  1. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0- 1.cdh5.2.0.p0.36 /lib/hive/lib/json-serde-1.3.6-jar-with-dependencies.jar

  2. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0-1.cdh5.2.0.p0.36/lib/hadoop-mapreduce/lib/json-serde-1.3.6-jar-with-dependencies.jar

Remarque: Ce chemin varie en cluster.