Spark join抛出“function”对象没有属性“get\u object\u id”错误。我怎么能修好它?

2024-05-19 10:53:32 发布

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

我正在数据块中的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是一个函数,而不是我之前定义的属性。

所以,我怎样才能正确地加入以得到我想要的呢?

非常感谢!


Tags: 数据info信息iddf电影namestitle
1条回答
网友
1楼 · 发布于 2024-05-19 10:53:32

添加注释作为答案,因为它解决了问题。count在DataFrame API中是一个受保护的关键字,因此命名列count是危险的。在您的例子中,您可以通过不使用点符号,而是使用基于括号的列访问来避免错误,例如

info["count"]

相关问题 更多 >

    热门问题