【问题标题】:Traversing RDD Key Value pairs when having several Values有多个值时遍历 RDD 键值对
【发布时间】:2018-03-14 13:22:20
【问题描述】:

我目前是 Spark 的新手,我正在使用 Scala。 我在遍历 RDD Key Value 对时遇到了一些麻烦。 我得到了一个 TSV 文件,file1,其中包括 Country Name、Latittude 和 Longitude,我已经到此为止了;

val a = file1.map(_.split("\t")).map(rec => (rec(1), (rec(11).toDouble, rec(12).toDouble)))

其中rec(1) 是国家名称,rec(11) 是经度,rec(12) 是纬度。 据我了解,a 现在是一个键值对,rec(1) 是键,rec(11) 和 rec(12) 是值。 我设法测试了a.first._1 gives 第一个密钥 a.first._2._1 给出键的第一个值。 a.first._2._2 给出键的第二个值。

我的目标是至少设法使用相同的密钥获得所有 rec(11) 的平均值,并且与 rec(12) 相同。所以我的想法是将它们全部相加,然后除以具有该键的键值对的数量。

有人可以帮助我下一步该怎么做吗?我尝试了map、flatValueMap、valueMap、groupByKey 等,但我似乎无法同时对rec(11) 和rec(12) 求和。

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

您可以使用groupByKey 然后使用agg 操作和avg 来完成此操作

这是一个简单的例子:

原始 DF:

+------------+-----+
|country code|pairs|
+------------+-----+
|          ES|[1,2]|
|          UK|[2,3]|
|          ES|[4,5]|
+------------+-----+

执行操作:

df.groupBy($"country code").agg(avg($"pairs._1"), avg($"pairs._2"))

结果:

+------------+-------------+-------------+
|country code|avg(pairs._1)|avg(pairs._2)|
+------------+-------------+-------------+
|          ES|          2.5|          3.5|
|          UK|          2.0|          3.0|
+------------+-------------+-------------+

【讨论】:

    【解决方案2】:

    我的目标是至少设法获得所有具有相同键的rec(11) 的平均值,并且与rec(12) 相同

    您可以按照以下方式进行(为清楚起见,请注释)

    a.mapValues(x => (x, 1))    //putting counter to the values of (k, (v1, v2)) as (k, ((v1, v2), 1))
      .reduceByKey{case(x,y) => ((x._1._1+y._1._1, x._1._2+y._1._2), x._2+y._2)}  //summing separately all the values of v1, all the values of v2 and the counter of same key
      .map{case(x, y)=> (x, (y._1._1/y._2, y._1._2/y._2))}  //finding the average i.e. deviding the sum of v1 and v1 by counter sum separately
    

    这在https://stackoverflow.com/a/49166009/5880706中都有解释

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2019-05-06
      • 2021-11-22
      相关资源
      最近更新 更多