当前位置:   article > 正文

Spark基本的RDD算子之groupBy,groupByKey,mapValues_groupbykey mapvalues

groupbykey mapvalues

1. groupby

 

  1. def groupBy[K: ClassTag](f: T => K): RDD[(K, Iterable[T])]
  2. def groupBy[K: ClassTag](f: T => K, numPartitions: Int): RDD[(K, Iterable[T])]
  3. def groupBy[K: ClassTag](f: T => K, p: Partitioner): RDD[(K, Iterable[T])]

 

 

groupBy算子接收一个函数,这个函数返回的值作为key,然后通过这个key来对里面的元素进行分组。

 

  1. val a = sc.parallelize(1 to 9, 3)
  2. a.groupBy(x => { if (x % 2 == 0) "even" else "odd" }).collect
  3. //返回的even或者odd字符串作为keygroup RDD里面的值,
  4. res42: Array[(String, Seq[Int])] = Array((even,ArrayBuffer(2, 4, 6, 8)), (odd,ArrayBuffer(1, 3, 5, 7, 9)))


2. groupbykey

 

 

  1. def groupByKey(): RDD[(K, Iterable[V])]
  2. def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]
  3. def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]


这个算子和group类似,不过和它不同的是他不接收一个函数,而是直接将键值对类型的数据的key作为group的key 值。同样的,他也可以接收其他参数比如说partitioner

 

  1. val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "spider", "eagle"), 2)
  2. val b = a.keyBy(_.length) //将字符串的长度作为key值。
  3. b.groupByKey.collect //根据相同key值来进行group操作
  4. res11: Array[(Int, Seq[String])] = Array((4,ArrayBuffer(lion)), (6,ArrayBuffer(spider)), (3,ArrayBuffer(dog, cat)), (5,ArrayBuffer(tiger, eagle)))

 


3.mapValues

 

同基本转换操作中的map,只不过mapValues是针对[K,V]中的V值进行map操作。

 

  1. val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", " eagle"), 2)
  2. val b = a.map(x => (x.length, x))
  3. b.mapValues("x" + _ + "x").collect
  4. //结果
  5. Array(
  6. (3,xdogx),
  7. (5,xtigerx),
  8. (4,xlionx),
  9. (3,xcatx),
  10. (7,xpantherx),
  11. (5,xeaglex)
  12. )
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/466724
推荐阅读
相关标签
  

闽ICP备14008679号