当前位置:   article > 正文

PySpark map mapValues用法

mapvalues

用法

  • map: 对rdd每个元素(包括key,value) 进行 数据转换操作,rdd的元素个数不能改变
  • mapValues:
    对rdd每个元素的values进行 数据转换操作,rdd的元素个数不能改变;
    其实 每个元素 格式大致为: RDD( (‘key1’,[val1,val2]),(‘key2’,[val11,val21]) );
    而 mapValues就是 通过一个函数对 每个元素的values作为参数传给函数;如 sum([val1,val2]);
    所以 mapValues是对每个元素的values整体进行的操作;而不像reduceByKey是对每个元素的values内部的每个值 两两间进行迭代操作;
    mapValues源码

何时使用

  • 在对rdd每个元素进行操作,且rdd元素个数不能改变时 可以使用这2个方法;

使用示例

# -*- coding: utf-8 -*-
"""
(C) rgc
All rights reserved
create time '2021/5/30 20:06'

Usage:
# 每个元素进行操作
map: 对rdd每个元素(包括key,value) 进行 数据转换操作,rdd的元素个数不能改变
mapValues: 对rdd每个元素的values进行 数据转换操作,rdd的元素个数不能改变;
           其实 每个元素 格式大致为: RDD( ('key1',[val1,val2]),('key2',[val11,val21]) )
           而 mapValues就是 通过一个函数对 每个元素的values作为参数传给函数;如 sum([val1,val2]);
           所以 mapValues是对每个元素的values整体进行的操作;而不像reduceByKey是对每个元素的values进行迭代操作;
"""
# 构建spark

from pyspark.conf import SparkConf
from pyspark.context import SparkContext

conf = SparkConf()
# 使用本地模式;且 executor设置为1个方便debug
conf.setMaster('local[1]').setAppName('rgc')
sc = SparkContext(conf=conf)

rdd = sc.parallelize([2, 1, 3, 4, 4], 1)


def map_func(x: int) -> tuple:
    """
    将每个元素转为元祖
    :param x: rdd中每个元素
    :return:
    """
    return (x, 1)


# map操作
map_rdd = rdd.map(map_func).cache()
print(map_rdd.collect())  # [(2, 1), (1, 1), (3, 1), (4, 1), (4, 1)]

# mapValues操作
# 数据结构转换方式:[(2, 1), (1, 1), (3, 1), (4, 1), (4, 1)] => [(2,[1]),(1,[1]),(3,[1]),(4,[1,1])]
temp_rdd = rdd.map(map_func).groupByKey()
print(temp_rdd)
map_values_rdd = temp_rdd.mapValues(len)
print(map_values_rdd.collect())  # [(2, 1), (1, 1), (3, 1), (4, 2)]


def map_values_func(x):
    """
    对values进行集合去重操作
    :param x:
    :return:
    """
    print(list(x), 'groupByKey结果中 每个元素的values转为List')
    return set(x)


# 对每个元素的values进行 集合并集操作
map_values_rdd2 = temp_rdd.mapValues(map_values_func)
print(map_values_rdd2.collect())  # [(2, {1}), (1, {1}), (3, {1}), (4, {1})]

  • 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
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/466781
推荐阅读
相关标签
  

闽ICP备14008679号