【问题标题】:Scala : Is there any operation in scala like rdd1.fun( val1) or rdd1.fun( rdd2)?Scala:Scala 中是否有像 rdd1.fun(val1) 或 rdd1.fun(rdd2) 这样的操作?
【发布时间】: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)))。

标签: scala operators


【解决方案1】:

您可以使用隐式转换或隐式类来做到这一点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2017-03-14
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多