tutorial summoners pig meaning game espaƱol com2us hadoop hive

hadoop - summoners - hive sql



Formato de salida JSON para resultados de Hive Query (4)

¿Hay alguna manera de convertir el resultado de la consulta de Hive en formato JSON?


Estaba usando una herramienta llamada Apache Nifi. Tiene procesador AvrotoJSON. La salida de la sección que está en formato Avro se puede convertir fácilmente a JSON. El siguiente enlace será útil: https://nifi.apache.org/


Esto parece surgir bastante a menudo. Utilice los UDF de to_json de Brickhouse ( http://github.com/klout/brickhouse ). Si convierte sus resultados en un named_struct, lo interpretará como un mapa JSON, y dará como resultado.

SELECT to_json( named_struct( "field1", field1 , "field2", field2, "field3", field3 ) ) FROM mytable;

El to_json también interpretará matrices y mapas en consecuencia.


La forma más sencilla sería primero almacenar como tsv y luego usar bibliotecas como spray para convertir a JSON.

Hive funciona bien siempre y cuando no intentes personalizar demasiado. Si tiene acceso a Spark en su clúster, use SparkSQL en lugar de Hive. Los resultados de su consulta se almacenarán en un SchemaRDD y desde allí podrá mapear fácilmente a un JSon haciendo .map (_. ToJson), asumiendo que tiene un spray importado en su alcance.


Mi experiencia será usar la biblioteca jackson (http://jackson.codehaus.org/), creará un POJO para asignar el formato json. Así que una vez que obtenga el ResultSet de su consulta de la colmena, itere a través de él y cree objetos del POJO utilizando Jackson.

/**--JACKSON Class--**/ public class Item { @JsonProperty private String att1; @JsonProperty private String att2; public Item(String att1, String att2){ this.att1 = att1; this.att2 = att2; } } /**--the class where u run your query--**/ List<Item> list = new ArrayList<Item>(); ResultSet rs = executeQuery(queryStr); // do your hive query here while(rs.next){ String att1 = rs.get("att1"); String att2 = rs.get("att2"); Item item = new Item(att1, att2); list.add(item); }

luego puede devolver una Lista de elementos como resultado, Jackson le permite escribirlo en formato json con mucha facilidad.

  1. crear un MapMapper ObjectMapper mapper = new ObjectMapper (); El asignador le ofrece muchas opciones para escribir el objeto en formato json en diferentes destinos. p.ej. flujo de salida, bytebuffer etc.

  2. iterar a través de la lista.

  3. use el mapeador para escribir el valor en formato json, por ejemplo. mapper.writeValue (out, Item). En este ejemplo, out es un OutputStream.