假设我有两个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工作。
答案 0 :(得分:0)
您可以使用隐式转换或隐式类来执行此操作。
implicit class RichRDD[T](rdd: RDD[T]) {
def myFunction(other: RDD[T]): ? = { ... }
}
以下是整数示例:
scala> implicit class RichInt(i: Int) {
| def toThePowerOf(b: Int): Int = scala.math.pow(i, b).toInt
}
defined class RichInt
scala> 2.toThePowerOf(4)
res1: Int = 16