Spark join throws'function'对象没有属性'_get_object_id'错误.我该怎么办呢?

jar*_*fly 3 python sql join function apache-spark

我正在使用Spark中的Databricks进行查询,当我尝试在两个数据帧之间进行连接时,我遇到了问题.我拥有的两个数据帧是下一个:

  • "names_df"有2列:"ID","title",表示电影的id和标题.

    +-------+-----------------------------+
    |ID     |title                        |
    +-------+-----------------------------+
    |1      |Toy Story                    |
    |2      |Jumanji                      |
    |3      |Grumpier Old Men             |
    +-------+-----------------------------+
    
    Run Code Online (Sandbox Code Playgroud)
  • "info"有3列:"movieId","count","average",指的是电影的id,它有的排名数,以及这些评级的平均值.

    +-------+-----+------------------+
    |movieId|count|average           |
    +-------+-----+------------------+
    |1831   |7463 |2.5785207021305103|
    |431    |8946 |3.695059244355019 |
    |631    |2193 |2.7273141814865483|
    +-------+-----+------------------+
    
    Run Code Online (Sandbox Code Playgroud)

这个"信息"数据框是这样创建的:

info =  ratings_df.groupBy('movieId').agg(F.count(ratings_df.rating).alias("count"), F.avg(ratings_df.rating).alias("average"))
Run Code Online (Sandbox Code Playgroud)

其中"ratings_df"是另一个包含3列的数据框:"userId","movieId"和"rating",它指的是投票的用户的ID,用户投票的电影的ID,以及那部电影:

+-------+-------+-------------+
|userId |movieId|rating       |
+-------+-------+-------------+
|1      |2      |3.5          |
|1      |29     |3.5          |
|1      |32     |3.5          |
+-------+-------+-------------+
Run Code Online (Sandbox Code Playgroud)

我试图在这两个数据帧之间建立连接以获得另一个数据框:"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 |
+-------+-----------------------------+-----+-------+
Run Code Online (Sandbox Code Playgroud)

所以我做的操作是下一个:

movie_names_df = info.join(movies_df, info.movieId == movies_df.ID, "inner").select(movies_df.title, info.average, info.movieId, info.count).show()
Run Code Online (Sandbox Code Playgroud)

问题是我收到下一条错误消息:

AttributeError: 'function' object has no attribute '_get_object_id'
Run Code Online (Sandbox Code Playgroud)

我知道发生此错误是因为它认为info.count是一个函数,而不是我之前定义的属性.

那么,我怎样才能正确地加入以获得我想要的东西呢?

非常感谢!

LiM*_*Bei 9

添加评论作为答案,因为它解决了问题.count在DataFrame API中有点受保护的关键字,因此命名列计数很危险.在您的情况下,您可以通过不使用点表示法来绕过错误,但是基于括号的列访问,例如

info["count"]
Run Code Online (Sandbox Code Playgroud)