【问题标题】:Scala - How to concatenate List and Option values after joining two RDDs?Scala - 加入两个 RDD 后如何连接列表和选项值?
【发布时间】:2019-03-17 21:17:28
【问题描述】:

我有两个想要加入的 RDD - salesfromSource1: RDD[(String, List[Sale])]filteredSales: RDD[(String, Sale)]

由于我想执行左连接,我尝试了以下方法:

val joinedSales: RDD[(String, (List[Sale], Option[Sale]))] = salesfromSource1.leftOuterJoin(filteredSales)

但是如何连接这些值以便得到RDD[(String, List[InvocaCall])]

我希望通过.mapValues(_._1 ::: _._2) 实现这一目标

但是我得到一个类型不匹配的编译器突出显示(expected (List[Sale], Option[Sale]) => NotinferedU, actual: (Any, Any) => Any)

【问题讨论】:

    标签: scala apache-spark join rdd


    【解决方案1】:

    例如这样:

    .mapValues {
       case (x, None) => x
       case (x, Some(y)) => x :: y
    }
    

    .mapValues { x =>
      x._2.map(y => x._1 :: y).getOrElse(x._1)
    }
    

    【讨论】:

    • 我已经尝试了您提出的两个示例,但编译器无法解析 x :: y 中的 :: 符号。这可能是什么原因?
    • 我想我找到了答案。以冒号“:”结尾的运算符是右结合的。
    • @user10496094 在这种情况下应该是y :: x._1,不是吗?
    猜你喜欢
    • 2016-09-07
    • 2015-04-23
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2017-06-27
    • 2019-11-25
    • 2018-11-24
    相关资源
    最近更新 更多