Skip to main content
 首页 » 编程设计

python之PySpark之使用共享相同值的两个键创建对 RDD

2024年08月25日31kuangbin

我有一个键值对 RDD,其中键是一个 Actor ,值是这个 Actor 参与的电影,形式为:

["actor 1", "movie 1"] 
["actor 1", "movie 2"] 
["actor 1", "movie 3"] 
... 
["actor n", "movie 2"]  

我想将其映射到另一个键值对 RDD,其中每对由参与一部普通电影的两个 Actor 组成。

在上面的例子中,这意味着新的 RDD 将包含 ["actor 1", "actor n"] 对,因为它们都参与了 "movie 2"。

请您参考如下方法:

一个简单的交换和连接就可以解决问题。首先让我们创建一些虚拟数据和一个小的辅助函数:

actor_movie = sc.parallelize([ 
    ("actor 1", "movie 1"), 
    ("actor 1", "movie 3"), 
    ("actor 1", "movie 3"), 
    ("actor n", "movie 2") 
]) 
 
swap = lambda x: (x[1], x[0]) 

接下来交换顺序:

movie_actor =  (actor_movie.map(swap) 
    .partitionBy(actor_movie.getNumPartitions()) 
    .cache()) 

并加入:

(movie_actor 
    .join(movie_actor) # Join by movie 
    .values() # Extract values (actors) 
    .filter(lambda x: x[0] != x[1]))