使用pyspark将列表值对Map到键值对

dxxyhpgq  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(428)

我正在解决一个问题,我必须使用pyspark中的map()函数将大约700万个列表值对转换为键值对,其中给定列表值对中使用的列表长度最多可以是20。
例如:

listVal= [(["ank","nki","kit"],21),(["arp","rpi","pit"],22)]

现在,我想要键值对作为

keyval= [("ank",21),("nki",21),("kit",21),("arp",22),("rpi",22),("pit",22)]

当我写作的时候

keyval= listval.map(lambda x: some_function(x))

其中某些函数()定义为:

def some_function(x):
  shingles=[]
  for i in range(len(x[0])):
    temp=[]
    temp.append(x[0][i])
    temp.append(x[1])
    shingles.append(tuple(temp))

  return shingles

我没有得到所需的输出,因为我认为map()为列表中的一个项返回一个键值对,而不是多个键值对。我也尝试过其他东西,在网上搜索过,但没有找到任何相关的东西。
任何帮助都将不胜感激。

nimxete2

nimxete21#

因此,利用您的局限性,这可以通过pyspark的.flatmap()实现

def conversion(n):
    return [(x, n[1]) for x in n[0]]

listVal.flatMap(conversion)

或者在一条线上

listVal.flatMap(lambda n: [(x, n[1]) for x in n[0]])

相关问题