Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spark如何将(键值列表)拆分为键值对_Python_Pyspark - Fatal编程技术网

Python Spark如何将(键值列表)拆分为键值对

Python Spark如何将(键值列表)拆分为键值对,python,pyspark,Python,Pyspark,给定一个具有多个键值对的RDD,其中每个值实际上都是一个值列表,如何分割值列表,以得到简单的键值对 from pyspark import SparkConf, SparkContext conf = SparkConf() sc = SparkContext(conf=conf) foo = sc.parallelize([(0,[1,1,4]),(1,[3,5])]) bar = foo.map(magic) bar.collect() >>>>[(0,1),(0,1

给定一个具有多个键值对的RDD,其中每个值实际上都是一个值列表,如何分割值列表,以得到简单的键值对

from pyspark import SparkConf, SparkContext
conf = SparkConf()
sc = SparkContext(conf=conf)
foo = sc.parallelize([(0,[1,1,4]),(1,[3,5])])
bar = foo.map(magic)
bar.collect()
>>>>[(0,1),(0,1),(0,4),(1,3),(1,5)]

要实现我想要的,magic会是什么样子?

Python允许您任意组合多个生成器表达式,本质上允许您“展开”这样的嵌套结构。每个“层”都将是一个新的

lambda l:[(键,值)代表(键,值)代表l中的值代表值中的值]
>>l=[(0[1,1,4]),(1[3,5])]
>>>[(键,值)表示l中的(键,值)表示值中的值]
[(0, 1), (0, 1), (0, 4), (1, 3), (1, 5)]
找到了答案:

bar=foo.flatMap(lambda l: [(l[0], value) for value in l[1]])

我意识到这是一个相当简单的问题和解决方案,但我将把它留给其他人,以防其他人在开始使用pyspark时遇到困难。

这似乎对pyspark不起作用。使用lambda函数实现magic,我得到了TypeError:无法解包不可iterable int object这意味着在某种嵌套级别上,您试图“解包”整数类型而不是容器类型。你能准确地粘贴你所尝试的吗?bar=foo.map(lambda l:[(key,value)for(key,value)for(key,value)for(key,value)in l for value in values])嗯,我可能有点不知所措了。我从python解释器复制了我的第二个代码段,因此假设您使用的是python 3,我认为我们应该看到相同的行为。pyspark可能以某种我看不到的方式在这里发挥作用,在这种情况下,我的答案可能没有帮助:我的答案是泛型Python。