PySpark实战:flatMapValues操作

来自CloudWiki
跳转至: 导航搜索

介绍

flatMapValues操作是一个变换算子,

它的作用是对RDD元素格式为KV对中的Value进行func定义的逻辑处理。

Value中每一个元素被输入函数func映射为一系列的值,然后这些值再与原RDD中的Key组成一系列新的KV对,并将结果进行扁平化处理。

代码


import findspark
findspark.init()
##############################################
from pyspark.sql import SparkSession
spark = SparkSession.builder \
        .master("local[1]") \
        .appName("RDD Demo") \
        .getOrCreate();
sc = spark.sparkContext
#############################################
rdd = sc.parallelize([("a", ["x", "y", "z"]), ("c", ["w", "m"])])
def f(x): 
        return x
ret = rdd.flatMapValues(f)
#[('a', 'x'), ('a', 'y'), ('a', 'z'), ('c', 'w'), ('c', 'm')]
print(ret.collect())
##############################################
sc.stop()

  • ret = rdd.flatMapValues(f) 将对RDD中每个KV按照函数f进行逻辑处理,

在对第一个KV键值对("a",["x","y","z"])进行处理时,

当Key为"a"时,会对["x","y","z"]这个Value中的每一个元素进行f函数逻辑处理。即返回"x","y","z"

并依次与原Key合并成新的KV, 即[('a','x'),('a','y'),('a','z')]

输出

[('a', 'x'), ('a', 'y'), ('a', 'z'), ('c', 'w'), ('c', 'm')]