Как читать JSON с данными, как и обрабатывать с помощью objectMapper в Java - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть строка json, как показано ниже, которая транслируется из темы kakfa {«card_id»: 348702330256514, «member_id»: 37495066290, «amount»: 4380912, «postcode»: 96774, «pos_id»: 248063406800722, «action_dt »:«01-03-2018 08:24:29 ”}

Как проанализировать эти данные с помощью ObjectMapper с TransactionData.class и прочитать значения с помощью методов получения и установки.

 rdd.foreach(a -> { System.out.println(a);
                    ObjectMapper mapper = new ObjectMapper();

 TransactionData cardTransactions = 
 mapper.readValue(a,TransactionData.class);
 System.out.println(cardTransactions);
                    TransactionData transData = new TransactionData();

                    JSONObject obj = new 
JSONObject(cardTransactions.toString());

                    String cardId = obj.get(“card_id”).toString();
                    System.out.println(“Printing json cardId: “+ cardId);
                    transData.setCard_id(cardId);

                    String memberId = obj.get(“member_id”).toString();
        System.out.println(“Printing json memberId: “+ memberId);
                    transData.setMember_id(memberId);

                    int amount = obj.getInt(“amount”);
                    System.out.println(“Printing json Amount: “+ amount);
                    transData.setAmount(amount);

                    int postcode = obj.getInt(“postcode”);
     System.out.println(“Printing json Postcode: “+ postcode);
                    transData.setPostcode(postcode);

                    String pos_id = obj.get(“pos_id”).toString();
                    System.out.println(“Printing json pos_id: “+ pos_id);
                    transData.setPos_id(pos_id);

      String transaction_dt = obj.getString(“transaction_dt”);
   System.out.println(“Printing json transaction_dt: “+ transaction_dt);
                    transData.setTransaction_dt(transaction_dt);
                    transData.setUid(cardId + “#” + amount);
   System.out.println(“Printing json transaction_dt: “+ transData.getTransaction_dt());

                }); 

1 Ответ

0 голосов
/ 30 декабря 2018

Используйте следующий код с импортом ниже:

//import com.fasterxml.jackson.core.JsonGenerator;
//import com.fasterxml.jackson.core.JsonParseException;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.JsonMappingException;
//import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();
List<TransactionData> dataList = new ArrayList<TransactionData>();

rdd.foreach(a -> {
        try
           {
             // Use this line if the incoming data is an exact match
             // Map<TransactionData> transData = mapper.readValue(a, new TypeReference<TransactionData>(){});

             // Else the following code
             Map<String, Object> mapList = mapper.readValue(a, new TypeReference<Map<String, Object>>(){});
             TransactionData transData = new TransactionData();
             for(Map<String,Object> map : mapList)
             {
                transData.setCard_id(map.get("card_id").toString());
                // add others..........
             }
                dataList.add(transData);
            }
    }
catch (JsonParseException e)
    {
        e.printStackTrace();
    }
catch (JsonMappingException e)
    {
        e.printStackTrace();
    }
catch (IOException e)
    {
        e.printStackTrace();
    } }); 

Если вам нужно создать фрейм данных:

Dataset<Row> dff = spark.createDataFrame(dataList, TransactionData.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...