当前位置:   article > 正文

RDD的转换算子groupBy详解_javardd groupby

javardd groupby
  • groupBy算子
    • 格式: groupBy(fn)
    • 说明: 根据传入的函数对数据进行分组操作
rdd = sc.parallelize([1,2,3,4,5,6,7,8,9,10])

需求: 请将数据分为奇数和偶数二部分

划分奇数和偶数:2取余, 余数为 0 即为偶数 余数为1 即为奇数

def fn1(e):
    if e % 2 == 0:
        return 'o'
    else:
        return 'j'

rdd.groupBy(fn1).collect()

结果:
[
    ('j', <pyspark.resultiterable.ResultIterable object at 0x7f09acefba30>), 
    ('o', <pyspark.resultiterable.ResultIterable object at 0x7f09adadb910>)
]

mapValues(list): 将 kv中value转换为list类型

rdd.groupBy(fn1).mapValues(list).collect()

结果:
[
    ('j', [1, 3, 5, 7, 9]), 
    ('o', [2, 4, 6, 8, 10])
]

思考: 上述编写 fn1函数, 请问是否可以写成lambda, 如果可以, 这个lambda应该如何编写呢? 
rdd.groupBy(lambda e: 'o' if e % 2 == 0 else 'j' ).mapValues(list).collect()

[
    ('j', [1, 3, 5, 7, 9]), 
    ('o', [2, 4, 6, 8, 10])
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号