加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – value reduceByKey不是org.apache.spark.rdd.RDD的成员

发布时间:2020-12-16 10:06:19 所属栏目:安全 来源:网络整理
导读:这很伤心.我的火花版本是2.1.1,Scala版本是2.11 import org.apache.spark.SparkContext._import com.mufu.wcsa.component.dimension.{DimensionKey,KeyTrait}import com.mufu.wcsa.log.LogRecordimport org.apache.spark.rdd.RDDobject PV {// def stat[C :
这很伤心.我的火花版本是2.1.1,Scala版本是2.11

import org.apache.spark.SparkContext._
import com.mufu.wcsa.component.dimension.{DimensionKey,KeyTrait}
import com.mufu.wcsa.log.LogRecord
import org.apache.spark.rdd.RDD

object PV {

//
  def stat[C <: LogRecord,K <:DimensionKey](statTrait: KeyTrait[C,K],logRecords: RDD[C]): RDD[(K,Int)] = {
    val t = logRecords.map(record =>(statTrait.getKey(record),1)).reduceByKey((x,y) => x + y)

我收到了这个错误

at 1502387780429
[ERROR] /Users/lemanli/work/project/newcma/wcsa/wcsa_my/wcsavistor/src/main/scala/com/mufu/wcsa/component/stat/PV.scala:25: error: value reduceByKey is not a member of org.apache.spark.rdd.RDD[(K,Int)]
[ERROR]     val t = logRecords.map(record =>(statTrait.getKey(record),y) => x + y)

定义了一个特征

trait KeyTrait[C <: LogRecord,K <: DimensionKey]{
  def getKey(c:C):K
}

It is compiled,Thanks.

def stat[C <: LogRecord,K <:DimensionKey : ClassTag : Ordering](statTrait: KeyTrait[C,y) => x + y)

关键需要覆盖Ordering [T].

object ClientStat extends KeyTrait[DetailLogRecord,ClientStat] {
      implicit val c

lientStatSorting = new Ordering[ClientStat] {
    override def compare(x: ClientStat,y: ClientStat): Int = x.key.compare(y.key)
  }

      def getKey(detailLogRecord: DetailLogRecord): ClientStat = new ClientStat(detailLogRecord)
    }

解决方法

这来自于通常使用一对rdd函数. reduceByKey方法实际上是PairRDDFunctions类的一个方法,它具有来自RDD的隐式转换:

implicit def rddToPairRDDFunctions[K,V](rdd: RDD[(K,V)])
    (implicit kt: ClassTag[K],vt: ClassTag[V],ord: Ordering[K] = null): PairRDDFunctions[K,V]

所以它需要几个隐式类型类.通常在处理简单的混凝土类型时,这些已经在范围内.但是您应该能够修改您的方法以同样需要相同的含义:

def stat[C <: LogRecord,logRecords: RDD[C])(implicit kt: ClassTag[K],ord: Ordering[K])

或者使用更新的语法:

def stat[C <: LogRecord,logRecords: RDD[C])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读