小编Seb*_*Seb的帖子

使用PartitionBy按键拆分和有效计算RDD组

我已经实现了一个RDD[K, V]按键分组的解决方案,并根据每个组计算数据(K, RDD[V]),使用partitionByPartitioner.不过,我不确定它是否真的有效,我想有你的观点.

下面是一个示例案例:根据列表[K: Int, V: Int],计算V每个组的s均值K,知道它应该是分布式的,并且V值可能非常大.这应该给:

List[K, V] => (K, mean(V))
Run Code Online (Sandbox Code Playgroud)

简单的Partitioner类:

class MyPartitioner(maxKey: Int) extends Partitioner {

    def numPartitions = maxKey

    def getPartition(key: Any): Int = key match {
      case i: Int if i < maxKey => i
    }
  }
Run Code Online (Sandbox Code Playgroud)

分区代码:

val l = List((1, 1), (1, 8), (1, 30), (2, 4), (2, 5), (3, 7))

      val rdd = sc.parallelize(l)
      val p …
Run Code Online (Sandbox Code Playgroud)

apache-spark rdd

7
推荐指数
1
解决办法
6744
查看次数

如何将RDD [(Key,Value)]转换为Map [Key,RDD [Value]]

我搜索了很长一段时间的解决方案,但没有得到任何正确的算法.

在scala中使用Spark RDD,如何将a RDD[(Key, Value)]转换为a Map[key, RDD[Value]],知道我不能使用collect或其他可能将数据加载到内存中的方法?

实际上,我的最终目标是Map[Key, RDD[Value]]按键循环并saveAsNewAPIHadoopFile为每个调用RDD[Value]

例如,如果我得到:

RDD[("A", 1), ("A", 2), ("A", 3), ("B", 4), ("B", 5), ("C", 6)]
Run Code Online (Sandbox Code Playgroud)

我想要 :

Map[("A" -> RDD[1, 2, 3]), ("B" -> RDD[4, 5]), ("C" -> RDD[6])]
Run Code Online (Sandbox Code Playgroud)

我想知道filter在每个键A,B,C上使用它是否花费不太多RDD[(Key, Value)],但是我不知道是否多次调用过滤器有不同的键会有效吗?(当然不是,但可能使用cache?)

谢谢

scala bigdata apache-spark rdd

6
推荐指数
1
解决办法
7159
查看次数

标签 统计

apache-spark ×2

rdd ×2

bigdata ×1

scala ×1