Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark:如何有效地从两个阵列中获取每一对?_Java_Apache Spark - Fatal编程技术网

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

Java Spark:如何有效地从两个阵列中获取每一对?,java,apache-spark,Java,Apache Spark,输入就像 [K1, Tuple(Array A, Array B)] [K2, Tuple(Array A, Array B)] [K3, Tuple(Array A, Array B)] 我想对输入做的是: 键:从值转换为每对值 值:使两个数组之间的每一对成为可能,并转换为键 完成此操作后,我希望得到以下结果: [(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]

输入就像

[K1, Tuple(Array A, Array B)]
[K2, Tuple(Array A, Array B)]
[K3, Tuple(Array A, Array B)]
我想对输入做的是:

  • 键:从值转换为每对值
  • 值:使两个数组之间的每一对成为可能,并转换为键
完成此操作后,我希望得到以下结果:

[(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进行处理(RDD大小不能大于Spark中的
Integer.MAX_值
)。因此,我需要另一种方法来避免大的输出。

您想要的输出丢失了
[(A[1],B[1]),K1]
例如,这是故意的吗?如果是这样的话,你如何确定这是不需要的呢?我也不知道spark,但假设你想构建每一个可能的对,那么除了数组列表之外,任何东西的输出大小都应该几乎相等。因此,一种选择可能是采用流式方法,即只映射输入的一部分,将其传递给RDD,然后他们继续输入的下一部分。@Thomas我也需要[(a[1],B[1]),K1]。在示例中,省略了这一点。如果我正确理解第二个注释,您的意思是将数组A与数组B的一部分配对,对吗?哦我认为它有效!!非常感谢你,我会尝试一下。你可以这样做,或者只是在关键点处拆分,即先处理K1,然后处理K2等。我想你可以先尝试平面图,将其分成(K,数组a)和(K,数组B)对,然后尝试spark的笛卡尔积,但我不确定你想要的输出是否缺少处理
[(a[1],B[1]),K1]
例如,这是故意的吗?如果是这样的话,你如何确定这是不需要的呢?我也不知道spark,但假设你想构建每一个可能的对,那么除了数组列表之外,任何东西的输出大小都应该几乎相等。因此,一种选择可能是采用流式方法,即只映射输入的一部分,将其传递给RDD,然后他们继续输入的下一部分。@Thomas我也需要[(a[1],B[1]),K1]。在示例中,省略了这一点。如果我正确理解第二个注释,您的意思是将数组A与数组B的一部分配对,对吗?哦我认为它有效!!非常感谢,我会尝试一下。你可以这样做,或者只是在关键点拆分,即先处理K1,然后处理K2等。我想你可以先尝试平面图,将其分成(K,数组a)和(K,数组B)对,然后尝试spark的笛卡尔积,但我不确定处理方法