【问题标题】:JavaRDD equivalent to GROUP BYJavaRDD 等价于 GROUP BY
【发布时间】:2019-01-28 16:00:48
【问题描述】:

我有一个包含以下列(Accident_Id、Date、Area)和数百行的 CSV 数据集。我想要实现的是按区域列分组到可能的唯一组中并找到每个组的计数。

我知道如何使用 SQLContext 做到这一点,但我不确定如何使用 JavaRDD 实现它以及它的操作(map、reduce 等...)

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();

【问题讨论】:

    标签: java apache-spark rdd


    【解决方案1】:

    您可以简单地制作一对 RDD,并使用它来按其键进行计数。

    以下只是假设一个带有逗号分隔记录的字符串 RDD:

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

    这将为您提供area -&gt; count 地图。

    如果您更喜欢手动实现归约逻辑,可以使用reduceByKey

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

    【讨论】:

      猜你喜欢
      • 2014-04-02
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多