首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >值联接不是org.apache.spark.rdd.RDD[(Long,T)]的成员

值联接不是org.apache.spark.rdd.RDD[(Long,T)]的成员
EN

Stack Overflow用户
提问于 2016-10-12 07:38:35
回答 1查看 1.4K关注 0票数 1

此函数似乎对我的IDE有效:

代码语言:javascript
复制
def zip[T, U](rdd1:RDD[T], rdd2:RDD[U]) : RDD[(T,U)] = {
    rdd1
      .zipWithIndex
      .map(_.swap)
      .join(
        rdd2
          .zipWithIndex
          .map(_.swap))
      .values
}

但当我编译时,我得到:

值联接不是org.apache.spark.rdd.RDD(Long,T)的成员,可能是因为在“值联接”之前缺少分号吗?.join(

我在Spark1.6中,我已经尝试导入_org.apache.spark.rdd.RDD.__,当它直接在函数定义之外的两个RDD上使用时,函数中的代码工作得很好。

知道吗?

EN

Stack Overflow用户

回答已采纳

发布于 2016-10-12 08:29:21

如果您更改签名:

代码语言:javascript
复制
def zip[T, U](rdd1:RDD[T], rdd2:RDD[U]) : RDD[(T,U)] = {

转入:

代码语言:javascript
复制
def zip[T : ClassTag, U: ClassTag](rdd1:RDD[T], rdd2:RDD[U]) : RDD[(T,U)] = {

这将编译。

为什么是joinPairRDDFunctions的一个方法(您的RDD被隐式转换为该类),它具有以下签名:

代码语言:javascript
复制
class PairRDDFunctions[K, V](self: RDD[(K, V)])
  (implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null)

这意味着它的构造函数需要ClassTag[T]ClassTag[U]类型的隐式值,因为这些值类型将用作值类型( PairRDDFunctions定义中的V )。您的方法不知道什么是TU,因此不能提供匹配的隐式值。这意味着隐式转换为PairRDDFunctions“失败”(编译器不执行转换),因此找不到join方法。

添加[K : ClassTag]是将隐式参数implicit kt: ClassTag[K]添加到方法的缩写,然后编译器使用该参数并将其传递给PairRDDFunctions的构造函数。

有关ClassTags的更多信息,以及它们对这篇好文章有什么好处。

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39993041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档