Spark:如何有效地从两个阵列中获得每对?

时间:2015-08-12 08:51:55

标签: java apache-spark

输入就像

[K1, Tuple(Array A, Array B)]
[K2, Tuple(Array A, Array B)]
[K3, Tuple(Array A, Array B)]

我想要输入的是:

  • Key :从值
  • 转换为每对的值
  • :在两个数组之间建立所有可能的对并转换为键

在此操作之后,我想得到这个结果:

[(A[0],B[0]), K1]
[(A[0],B[1]), K1]
[(A[0],B[2]), K1]
[(A[1],B[0]), K1]
[(A[0],B[0]), K2]
[(A[0],B[1]), K2]
[(A[0],B[0]), K3]

我使用flatMapToPair来执行此操作。 flatMapToPair返回一个输出,因此我必须将每个键值对合并到一些列表中,如下所示:

[K1, Tuple(Array A(size 2),Array B(size 2))]
== flatMapToPair=>
ArrayList{[(A[0],B[0]),K1],[(A[0],B[1]),K1],[(A[1],B[0]),K1],[(A[1],B[1]),K1]}

但是,在这种情况下,当输入数据太大时,输出(ArrayList)太大而无法处理RDD(Spark中的RDD大小不能大于Integer.MAX_VALUE)。所以,我需要另一种方法来避免大输出。

0 个答案:

没有答案