JavaRDD, эквивалентный GROUP BY - PullRequest
0 голосов
/ 28 января 2019

У меня есть набор данных CSV со следующими столбцами (Accident_Id, Date, Area) и сотнями строк.Чего я хочу добиться, так это сгруппировать по столбцу Площадь в возможные уникальные группы и найти количество каждой.

Я знаю, как это сделать с помощью SQLContext, но я не уверен, насколько это возможно с помощью JavaRDD и его действий (отображение, уменьшение и т. Д.) *

SparkConf conf = new SparkConf().setAppName("test").setMaster("local[2]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> data = sc.textFile(pathToCSV);

...
sqlContext.sql("SELECT COUNT(Area) FROM my_table GROUP BY Area").show();

1 Ответ

0 голосов
/ 28 января 2019

Вы можете просто создать пару СДР и использовать ее для подсчета по ключам.

Далее предполагается, что СДР в виде строки с записями через запятую:

Map<String, Long> areaCounts = 
    data.mapToPair(s -> new scala.Tuple2<>(s.split(",")[2], 1L)).countByKey();

И это будетпредоставим вам карту area -> count.

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

Map<String, Long> areaCounts = 
    data.mapToPair(s -> new scala.Tuple2<>(s.split(",")[2], 1L))
            .reduceByKey((l1, l2) -> l1 + l2).collectAsMap();
...