在Sp中提取python中的元组数组

2024-09-29 01:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个RDD格式:

(2, [hello, hi, how, are, you])

我需要把这些元组映射成:

((2,hello), (2, hi), (2, how), ((2, are), (2, you))

我在python中尝试:

PairRDD = rdd.flatMap(lambda (k,v): v.split(',')).map(lambda x: (k,x)).reduceByKey())

这将不起作用,因为我没有k在地图转换。我不知道怎么办?有什么意见吗?在

提前谢谢你。在


Tags: lambdayoumaphello格式hiarehow
1条回答
网友
1楼 · 发布于 2024-09-29 01:23:30

我认为你的核心问题是放错地方了。考虑下面的代码(我已经在Scala中测试了等效代码,但是在pySpark中应该是同样的工作方式):

PairRDD = rdd.flatMap(lambda (k,v): v.split(',').map(lambda x: (k,x)))

v被拆分为一个字符串列表,然后该列表映射到(key,string)的元组,然后该列表返回到flatMap,在RDD中将其拆分成多行。如果在v.split(',')后面有额外的右parens,则会丢弃该键(因为您只返回一个字符串列表)。在

键值在原始数据集中是唯一的吗?如果是这样,并且您需要一个元组列表,那么使用flatMap而不是map,这样您就可以得到您想要的结果而不必进行无序处理。如果您确实想合并来自原始数据集的多行,那么将调用groupByKey,而不是reduceByKey。在

我还想知道是否需要拆分是元组(Int,String)还是(Int,List(String))?在

相关问题 更多 >