Формат выходного сигнала JSON для результатов запроса куста - программирование
Подтвердить что ты не робот

Формат выходного сигнала JSON для результатов запроса куста

Есть ли способ конвертировать результат запроса куста в формат JSON?

4b9b3361

Ответ 1

Это, кажется, возникает довольно часто. Используйте to_json UDFs из Brickhouse (http://github.com/klout/brickhouse). Если вы преобразуете свои результаты в named_struct, он будет интерпретировать его как карту JSON и выводить соответственно.

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

To_json также будет интерпретировать массивы и карты соответственно.

Ответ 2

Я использовал инструмент Apache Nifi. Он имеет процессор AvrotoJSON. Выход улья, который находится в формате Avro, можно легко преобразовать в JSON. Следующая ссылка будет полезна: https://nifi.apache.org/

Ответ 3

Мой опыт будет использовать библиотеку Джексона (http://jackson.codehaus.org/), вы создаете POJO для сопоставления json-формата. Итак, как только вы получите ResultSet из своего запроса на куст, вы выполните его и создайте объекты POJO с помощью 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);
}

тогда вы можете вернуть список элементов в результате, Джексон позволяет легко записать его в формате json.

  • создать ObjectMapper ObjectMapper mapper = new ObjectMapper(); Mapper дает вам много возможностей для записи объекта в формате json в другую цель. например. outputstream, bytebuffer и т.д.

  • итерация по списку.

  • используйте mapper для записи значения в формате json, например. mapper.writeValue(out, Item). В этом примере out является OutputStream.

Ответ 4

Самый простой способ - сначала сохранить как tsv, а затем использовать библиотеки, такие как спрей, для преобразования в JSON.

Hive работает отлично, пока вы не пытаетесь настроить слишком много. Если у вас есть доступ к Spark в вашем кластере, используйте SparkSQL вместо Hive. Результаты вашего запроса будут сохранены в SchemaRDD, и оттуда вы можете легко сопоставить JSon, делающий .map(_. ToJson), если у вас есть спрей, импортированный в вашу область действия.