Получите количество значений из JSON (документ mongodb) с помощью Spark

Мой документ MongoDB выглядит так

{  
   "_id":"sdf23sddfsd",
   "the_list":[  
      {  
         "Sentiment":[  
            "Negative",
            "Positive",
            "Positive"
         ]
      },
      {  
         "Sentiment":[  
            "Neutral",
            "Positive"
         ]
      }
   ],
   "some_other_list":[  
      {  
         "Sentiment":[  
            "Positive",
            "Positive",
            "Positive"
         ]
      }
   ]
}

Я пытаюсь написать приложение Spark/Java, чтобы получить общее количество каждого Sentiments из the_list и some_other_list

// Create a JavaSparkContext using the SparkSession's SparkContext object
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());

// Create a custom ReadConfig
Map<String, String> readOverrides = new HashMap<String, String>();
readOverrides.put("collection", "tmp");
//readOverrides.put("readPreference.name", "secondaryPreferred");
ReadConfig readConfig = 
ReadConfig.create(jsc).withOptions(readOverrides);

// Load data using the custom ReadConfig
JavaMongoRDD<Document> customRdd = MongoSpark.load(jsc, readConfig);

Я тестировал выше, что может отлично получить значения, выполнив это

System.out.println(((Document)((ArrayList)customRdd.first().get("the_list")).get(0)).get("Sentiments"));
//Prints [Negative, Neutral]

Но я не понимаю, как агрегировать количество настроений как таковое:

{  
   "_id":"sdf23sddfsd",
   "the_list":{  
      "Negative":1,
      "Positive":3,
      "Neutral":1
   },
   "some_other_list":{  
      "Positive":1
   }
}

Я добрался до здесь, что неправильно, потому что он смотрит только на 0 индекс the_list

    JavaRDD<String> sentimentsRDD= customRdd.flatMap(document -> ((Document)((ArrayList)document.get("the_list")).get(0)).get("Sentiments"));

Я знаю, что мы можем сделать это напрямую в MongoDB, но мне нужно научиться делать это в Spark для таких структурированных данных, чтобы я использовал это обучение для других случаев использования, которые требуют дополнительных манипуляций с каждым документом в коллекции.


person Watt    schedule 14.07.2017    source источник
comment
Почему бы вам не использовать DataFrames (но придерживаться RDD, которые являются ассемблером Spark)?   -  person Jacek Laskowski    schedule 14.07.2017
comment
Конечно, @JacekLaskowski, пожалуйста, не стесняйтесь предлагать решение с использованием DataFrame, как я думал, поскольку структура JSON может иметь несколько уровней встраивания документов. Таким образом, DataFrame здесь может не подойти. Но я могу ошибаться.   -  person Watt    schedule 14.07.2017
comment
Если возможен вариант API DataFrame, поможет ли этот ответ --› stackoverflow.com/q/44814926/1305344?   -  person Jacek Laskowski    schedule 14.07.2017