【发布时间】:2017-04-20 19:19:59
【问题描述】:
假设我有两个 RDD:rdd1=(Double,Int,String), rdd2=(Double,String) 和一个我自己编写的函数:fun1,它会将 rdd1 和 rdd2 作为其输入。我怎样才能得到像 rdd1.fun1( val1) 或 rdd1.fun1( rdd2) 这样的结果?
例如,
rdd1=((1.53, 1, "22.35, 20.37, 15.52, 8.96"),
(2.62, 2, "17.15, 1.83, 16.36, 5.24"),
(5.66, 3, "7.98, 14.16, 12.35, 6.36"))
rdd2=( 1.53,"22.35, 20.37")
(ps. 1.53 is the minimal of[1.53,2.62,5.66]).
fun1 会从 rdd1 返回一个新的 rdd3,其中 rdd2 中的每个元素替换了 rdd1 中的每个对应参数,预期输出如下,
fun1(rdd1,rdd2)
{
...
new Tuple3(p1:Double, p2:Int, p3:String)
}
rdd3=((1.53, 1, "22.35, 20.37, 15.52, 8.96"),
(1.53, 2, "22.35, 20.37, 16.36, 5.24"),
(1.53, 3, "22.35, 20.37,12.35,6.36")).
也许调用 fun1 的一种方法是 rdd2.fun1(rdd1) 或其他一些调用方法。
我尝试过“加入”,但它对我的问题不起作用,因为“加入”只返回具有相同密钥的那些对。 但是当 rdd1 和 rdd2 是输入时,我不知道如何使 fun1 工作。
【问题讨论】:
-
请为您的问题创建一个minimal reproducible example。
-
可能你想要
join,但很难说。请编辑您的问题以包含@YuvalItzchakov 要求的详细信息。 -
非常感谢。我以“地图”的方式解决了我的问题。首先将rdd2转为Array,然后用Map调用fun1,像这样rdd3 = rdd1.map(x = > myfun(x,arr(1)))。