Scala:在scala中有任何操作,如rdd1.fun(val1)或rdd1.fun(rdd2)吗?

时间:2016-12-06 08:02:50

标签: scala operators

假设我有两个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工作。

1 个答案:

答案 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