我正在为pyspark中的键值映射进行基本操作。以下是问题描述:
data = {(1, [2, 3, 4]), (2, [a, b, 3]), (3, [x, y]) }
我想获取当前值列表中未包含的键的所有值。结果应该是这样的:
data = {(1, [a, b, x, y]), (2, [x, y]), (3, []) }
在对结果进行过滤之前,我只是尝试将值与几种方法结合起来:
data.map(lambda x: (x[0], x[1].map(lambda a,b: (x[a] + x[b])))):
失败,因为列表没有map
或flatMap
属性data.flatMapValues(lambda a, b: (data.lookup(a) + data.lookup(b))).
答案 0 :(得分:1)
我认为您想要做以下事情:
1)收集所有值(假设它们适合记忆。如果没有,我不得不多想):
values = (data.mapValues(lambda x: set(x))
.values()
.reduce(lambda x, y: x.union(y))
.collect())
2)(可能在广播数值后)映射数值以最终列表结束
data.mapValues(lambda x: [y for y in values if y not in x])
使用map迭代数据:data.map(lambda x:(x [0],x [1] .map(lambda a,b:(x [a] + x [b])))):失败因为列表没有map或flatMap属性
关于此的快速说明。你想要Python bultin map
。语法为map(function, sequence)
。