对我的RDD的所有元素执行一个函数

时间:2017-06-21 00:15:38

标签: scala apache-spark rdd

我将尝试以一般方式提出问题。

我有这样的功能

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li><a href="#">Button</a></li>
  <li><a href="#">Button</a></li>
  <li><a href="#">Button</a></li>
</ul>

我有一个对象 myFunction (Object first, Object second) 的rdd。

我需要在所有rdd元素上执行myFunction,在进程结束时我必须确保我的对象的所有对都是用myfunction执行的(..,..)

可能的一种方法是创建一个广播变量(作为我的RDD的副本),而不是

RDD [Object]

还有另一种方法可以提高性能吗?

1 个答案:

答案 0 :(得分:2)

使用RDD的.cartesian方法获取包含两者中所有元素对的RDD。在这种情况下,您需要RDD的笛卡儿:

rdd.cartesian(rdd).map({ case (x, y) => myFunction(x, y) })

请注意,这将包括一对元素与自身,以及两个顺序中的对,即(a,b)以及(b,a)。和(a,a)。