相关疑难解决方法(0)

Spark聚合函数如何 - aggregateByKey有效吗?

假设我在3个节点上有一个分发系统,我的数据分布在这些节点中.例如,我有一个test.csv文件,它存在于所有3个节点上,它包含2列:

**row   | id,  c.**
---------------
row1  | k1 , c1  
row2  | k1 , c2  
row3  | k1 , c3  
row4  | k2 , c4  
row5  | k2 , c5  
row6  | k2 , c6  
row7  | k3 , c7  
row8  | k3 , c8  
row9  | k3 , c9  
row10 | k4 , c10   
row11 | k4 , c11  
row12 | k4 , c12 
Run Code Online (Sandbox Code Playgroud)

然后我使用SparkContext.textFile将文件读出为rdd等等.据我所知,每个spark worker节点都会读取文件中的一部分.所以现在让我们说每个节点都会存储:

  • 节点1:行1~4
  • 节点2:第5~8行
  • 节点3:第9~12行

我的问题是,假设我想对这些数据进行计算,我需要将一个键组合在一起,因此键值对将是[k1 [{k1 c1} {k1 c2} {k1 c3}]]..等等. …

distributed-computing apache-spark

40
推荐指数
2
解决办法
5万
查看次数

火花。将 RDD 拆分成批

我有 RDD,其中每条记录都是 int:

[0,1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

我需要做的就是将这个 RDD 分成几批。即制作另一个 RDD,其中每个元素都是固定大小的元素列表:

[[0,1,2], [3,4,5], [6,7,8]]
Run Code Online (Sandbox Code Playgroud)

这听起来微不足道,但是,我最近几天感到困惑,除了以下解决方案之外找不到任何东西:

  1. 使用 ZipWithIndex 枚举 RDD 中的记录:

    [0,1,2,3,4,5] -> [(0, 0),(1, 1),(2, 2),(3, 3),(4, 4),(5, 5)]

  2. 使用 map() 迭代这个 RDD 并计算索引 index = int(index / batchSize)

    [1,2,3,4,5,6] -> [(0, 0),(0, 1),(0, 2),(1, 3),(1, 4),(1, 5)]

  3. 然后按生成的索引分组。

    [(0, [0,1,2]), (1, [3,4,5])]

这将为我提供我需要的东西,但是,我不想在这里使用 group。当您使用普通 Map Reduce 或某些抽象(如 Apache Crunch)时,这很简单。但是有没有办法在不使用重分组的情况下在 Spark 中产生类似的结果?

batching apache-spark rdd

5
推荐指数
1
解决办法
1973
查看次数