pyspark中mapValues,flatMap,flatMapValues之间的关系

实际问题举例

当面对的数据是{“山东”: [“山东煎饼”, "烟台苹果", "莱阳梨", "灌肠"], "河南": ["胡辣汤", "烩面"]}时,有时需要将其展成(地名,产品)数据形式,这时候就可以用到flatMapValues函数对其进行转变。

函数说明

flatMapValues是先对数据进行mapValues操作,然后对其返回的结果进行flatMap操作。在flatMap操作阶段,先将key值和value值的每个元素一一对应形成新的键值队[(key, values[0]), ..., (key, values[-1])]。

data_example = list({"山东": ["山东煎饼", "烟台苹果", "莱阳梨", "灌肠"], "河南": ["胡辣汤", "烩面"]}.items())
data_rdd = spark.sparkContext.parallelize(data_example)
data_rdd.flatMapValues(lambda x: x).collect()

"""
[('山东', '山东煎饼'),
 ('山东', '烟台苹果'),
 ('山东', '莱阳梨'),
 ('山东', '灌肠'),
 ('河南', '胡辣汤'),
 ('河南', '烩面')]
"""
在上述例子中,mapValues阶段返回的是值本身,可以先对其处理,然后再将其传递给flatMap阶段。
def length_product(x):
    for i in x:
        yield i.endswith("梨")

data_rdd.flatMapValues(length_product).collect()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值