我正在数据块中的Spark中进行查询,当我试图在两个数据帧之间进行连接时遇到了一个问题。我拥有的两个数据帧是下一个:
“names_df”有两列:“ID”,“title”表示电影的ID和标题。
+-------+-----------------------------+
|ID |title |
+-------+-----------------------------+
|1 |Toy Story |
|2 |Jumanji |
|3 |Grumpier Old Men |
+-------+-----------------------------+
“信息”有三个栏:“电影id”,“计数”,“平均”指的是电影的id,排名的数量,以及这些评分的平均值。
+-------+-----+------------------+
|movieId|count|average |
+-------+-----+------------------+
|1831 |7463 |2.5785207021305103|
|431 |8946 |3.695059244355019 |
|631 |2193 |2.7273141814865483|
+-------+-----+------------------+
这个“信息”数据框是这样创建的:
info = ratings_df.groupBy('movieId').agg(F.count(ratings_df.rating).alias("count"), F.avg(ratings_df.rating).alias("average"))
其中,“ratings_-df”是另一个数据帧,包含3列:“user id”、“movieId”和“rating”,分别表示投票用户的id、投票用户的电影id和该电影的分级:
+-------+-------+-------------+
|userId |movieId|rating |
+-------+-------+-------------+
|1 |2 |3.5 |
|1 |29 |3.5 |
|1 |32 |3.5 |
+-------+-------+-------------+
我正在尝试在这两个数据帧之间建立连接,以获得另一个具有以下列的数据帧:“movieId”、“title”、“count”、“average”:
+-------+-----------------------------+-----+-------+
|average|title |count|movieId|
+-------+-----------------------------+-----+-------+
|5.0 |Ella Lola, a la Trilby (1898)|1 |94431 |
|5.0 |Serving Life (2011) |1 |129034 |
|5.0 |Diplomatic Immunity (2009? ) |1 |107434 |
+-------+-----------------------------+-----+-------+
所以我做的手术是下一个:
movie_names_df = info.join(movies_df, info.movieId == movies_df.ID, "inner").select(movies_df.title, info.average, info.movieId, info.count).show()
问题是我收到下一条错误消息:
AttributeError: 'function' object has no attribute '_get_object_id'
我知道发生这个错误是因为它认为info.count是一个函数,而不是我之前定义的属性。
所以,我怎样才能正确地加入以得到我想要的呢?
非常感谢!
添加注释作为答案,因为它解决了问题。
count
在DataFrame API中是一个受保护的关键字,因此命名列count是危险的。在您的例子中,您可以通过不使用点符号,而是使用基于括号的列访问来避免错误,例如相关问题 更多 >
编程相关推荐