如何在spark rdd中执行虚拟查找

2024-09-21 03:29:21 发布

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

我有两个rdd

rdd1 =[('1', 3428), ('2', 2991), ('3', 2990), ('4', 2883), ('5', 2672), ('5', 2653)]
rdd2 = [['1', 'Toy Story (1995)'], ['2', 'Jumanji (1995)'], ['3', 'Grumpier Old Men (1995)']]

我想执行一个操作,将第一个rdd的第一个元素与第二个rdd的第二个元素关联起来

我的最终结果是这样的

[(''Toy Story (1995)'', 3428), ('Jumanji (1995)', 2991), ('Grumpier Old Men (1995)', 2990)]

请给我一个方法来执行这个


Tags: 方法元素oldrddtoystorymenrdd1
3条回答

您可以使用列表理解:

>>> [(y[1], x[1]) for x in rdd1 for y in rdd2 if x[0] == y[0]]
[('Toy Story (1995)', 3428),
 ('Jumanji (1995)', 2991),
 ('Grumpier Old Men (1995)', 2990)]

如果为了提高性能而处理集群上的大数据,可以使用广播和数据帧操作来完成

df_points = spark.createDataFrame(rdd1, schema=['index', 'points'])
df_movie = spark.createDataFrame(rdd2, schema=['index', 'Movie'])
df_join = df_points.join(broadcast(df_movie), on='index').select("Movie","points")

如果需要,还可以转换回RDD

df_join.rdd.map(list).collect()

使用联接和映射:

rdd1.join(rdd2).map(lambda x: (x[1][1], x[1][0])).collect()
#[('Toy Story (1995)', 3428),
# ('Jumanji (1995)', 2991),
# ('Grumpier Old Men (1995)', 2990)]

相关问题 更多 >

    热门问题