агрегация по JSON во Flink с использованием Java - PullRequest
0 голосов
/ 14 мая 2018

Я читаю данные JSON из файла.

Образцы данных

{"name":"user1","myparam0":false,"myparam1":"44750004-23df-4960-88be-ba0884291597","myparam2":"36A3BF29-23df-EE2A-76B9-19BC1C854BA7","myparam3":"http://www.seloger.com/","myparam4":"http://www.seloger.com/erreur-temporaire/husk-pie","ver":"4.0.0"}
{"name":"user1","myparam0":true,"myparam1":"44750004-8bff-4960-88be-ba0884291597","myparam2":"36A3BF29-88be-EE2A-76B9-19BC1C854BA7","myparam3":"","myparam4":"http://www.seloger.com/erreur-temporaire/binde","ver":"4.0.0"}

Я написал пример кода для чтения из файла и преобразовал данные вJSON вот так

DataStream<Object> input = env.readTextFile("file:///home/ravisankar/workspace/temporary/input.file")
                .map((line) -> {
                    return JSON.parseFull(line);
                });

Теперь мне нужно посчитать, сколько myparam3 пустых за 15 секунд, основываясь на имени.и сгруппировать по myparam4

Ex: {
  "user1": {
    "myparams3": 1,
    "myparam4": {
      "http://www.seloger.com/erreur-temporaire/binde": 1,
      "http://www.seloger.com/erreur-temporaire/husk-pie": 1
    }
  }
}

Можно ли извлечь такие данные из Flink?Я не вижу примеров работы над JSON с использованием Java.Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

вы можете использовать Джексон для анализа json объекта, а затем сделать цикл для подсчета ваших элементов

private ObjectMapper objectMapper = new ObjectMapper() ;
...
Object element = objectMapper.readValue( jsonString , Object.class );

или вы можете использовать регулярное выражение, соответствующее "myparam3": "" и вычислите совпадения

public static void main( String[] args ) throws IOException
{
    String str = "{\"name\":\"user1\",\"myparam0\":false,\"myparam1\":\"44750004-23df-4960-88be-ba0884291597\",\"myparam2\":\"36A3BF29-23df-EE2A-76B9-19BC1C854BA7\",\"myparam3\":\"http://www.seloger.com/\",\"myparam4\":\"http://www.seloger.com/erreur-temporaire/husk-pie\",\"ver\":\"4.0.0\"}\r\n" + 
            "{\"name\":\"user1\",\"myparam0\":true,\"myparam1\":\"44750004-8bff-4960-88be-ba0884291597\",\"myparam2\":\"36A3BF29-88be-EE2A-76B9-19BC1C854BA7\",\"myparam3\":\"\",\"myparam3\":\"\",\"myparam3\":\"\"\"myparam4\":\"http://www.seloger.com/erreur-temporaire/binde\",\"ver\":\"4.0.0\"}";

    Pattern pattern = Pattern.compile("\"myparam3\":\"\"");


    Matcher matcher = pattern.matcher(str);

    int count = 0;
    while (matcher.find()) {
        count++;
    }
    System.out.println("Matches found : " + count );
}
0 голосов
/ 16 мая 2018

Вы можете проанализировать вашу строку json для объекта, т.е. через библиотеку Джексона, и управлять потоком объектов java как обычно

...