分享

怎么重写spark中reducebykey的判断key相同的接口?

dlh 发表于 2016-7-29 10:18:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 9991
我要对rdd里的数据根据把key相似(注意不是相等)的做一次聚合,得到另一个rdd。
首先想到了reducebykey,但是reducebykey是把key相同的value做聚合,我有自己的判断key相似的逻辑,想让我的逻辑剃掉reducebykey自己的。

之后我看到了aggregate,但是aggregate得到的是值,不是rdd,因为我还要继续做其他运算,所以不能用aggregate

已有(1)人评论

跳转到指定楼层
qcbb001 发表于 2016-7-29 16:41:44
一般来讲,不需要重写的。
spark还是有很多RDD操作的。
 下面是RDD的基础操作API介绍:

操作类型
函数名
作用
转化操作
map()
参数是函数,函数应用于RDD每一个元素,返回值是新的RDD
flatMap()
参数是函数,函数应用于RDD每一个元素,将元素数据进行拆分,变成迭代器,返回值是新的RDD
filter()
参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD
distinct()
没有参数,将RDD里的元素进行去重操作
union()
参数是RDD,生成包含两个RDD所有元素的新RDD
intersection()
参数是RDD,求出两个RDD的共同元素
subtract()
参数是RDD,将原RDD里和参数RDD里相同的元素去掉
cartesian()
参数是RDD,求两个RDD的笛卡儿积
行动操作
collect()
返回RDD所有元素
count()
RDD里元素个数
countByValue()
各元素在RDD中出现次数
reduce()
并行整合所有RDD数据,例如求和操作
fold(0)(func)
和reduce功能一样,不过fold带有初始值
aggregate(0)(seqOp,combop)
和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
foreach(func)
对RDD每个元素都是使用特定函数



如果真要重写的话,楼主用的是Scala吧。可以采用下面方式

trait Friendly {
  def greet() = "Hi"
}

class Dog extends Friendly {
  override def greet() = "Woof"
}

class HungryDog extends Dog {
  override def greet() = "I'd like to eat my own dog food"
}

这里举例:
如果是reducebykey则是下面形式。
trait Friendly {
  def reducebykey() = "Hi"
}

class Dog extends Friendly {
  override def reducebykey() = "Woof"
}

class HungryDog extends Dog {
  override def reducebykey() = "I'd like to eat my own dog food"
}

也就是说你需先找到reducebykey所在类,然后继承,继承之后,通过override ,然后重写自己的逻辑


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条