微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 flatMapValues 时 pyspark 中的键错误

如何解决使用 flatMapValues 时 pyspark 中的键错误

我想添加在 flatMapValues 中使用的“键”,但我总是弄错。

这是rdd.collect()

[{'a': 1,'b': 2,'c': [1,2,3,4]},{'a': 11,'b': 22,'c': [5,6,7,8]},'b': 23,8]}]

和操作是

def add_key(x):
     x[0]['key'] = x[1]
     return x
rdd.map(lambda x: (x,x['c'])).flatMapValues(lambda x: x).map(add_key).map(lambda x:(x[1],x[0])

但我得到的结果是

[(1,{'a': 1,4],'key': 1}),(2,'key': 3}),(3,(4,'key': 4}),(5,8],'key': 5}),(6,'key': 7}),(7,(8,'key': 8}),'key': 8})]

如果'key'部分错误,结果应该是

[(1,'key': 2}),'key': 6}),'key': 8})]

1

解决方法

这是一个我不明白的有趣(错误?)。但这里有一个替代方案,应该会产生预期的结果:

rdd2 = (rdd
    .map(lambda x: (x,x['c']))
    .flatMapValues(lambda x: x)
    .map(lambda x: (x[1],{**x[0],**{'key':x[1]}}))
)

rdd2.collect()
[(1,{'a': 1,'b': 2,'c': [1,2,3,4],'key': 1}),(2,'key': 2}),(3,'key': 3}),(4,'key': 4}),(5,{'a': 11,'b': 22,'c': [5,6,7,8],'key': 5}),(6,'key': 6}),(7,'key': 7}),(8,'key': 8}),'b': 23,'key': 8})]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。