Spark rejoindre jette "fonction" de l'objet n'a pas d'attribut "_get_object_id' erreur. Comment pourrais-je résoudre ce problème?

Je fais une requête dans l'Étincelle dans Databricks, et j'ai un problema quand je suis en train de faire une jointure entre deux dataframes. Les deux dataframes que j'ai sont les suivants:

  • "names_df" qui a 2 colonnes: "ID", "titre" qui font référence à l'id et le titre des films.

    +-------+-----------------------------+
    |ID     |title                        |
    +-------+-----------------------------+
    |1      |Toy Story                    |
    |2      |Jumanji                      |
    |3      |Grumpier Old Men             |
    +-------+-----------------------------+
  • "info" qui a 3 colonnes: "movieId", "compter", "moyenne" qui font référence à l'id du film, le nombre de rangs qu'il a, et la moyenne de ces notes.

    +-------+-----+------------------+
    |movieId|count|average           |
    +-------+-----+------------------+
    |1831   |7463 |2.5785207021305103|
    |431    |8946 |3.695059244355019 |
    |631    |2193 |2.7273141814865483|
    +-------+-----+------------------+

Cette "info" dataframe a été créé de cette façon:

info =  ratings_df.groupBy('movieId').agg(F.count(ratings_df.rating).alias("count"), F.avg(ratings_df.rating).alias("average"))

Où "ratings_df" est un dataframe qui contient 3 colonnes: "userId", "movieId" et "notation", qui font référence à l'id de l'utilisateur qui a voté, à l'id du film que l'utilisateur a voté, et la cote de ce film:

+-------+-------+-------------+
|userId |movieId|rating       |
+-------+-------+-------------+
|1      |2      |3.5          |
|1      |29     |3.5          |
|1      |32     |3.5          |
+-------+-------+-------------+

Je suis en train de faire une jointure entre ces deux dataframes pour en prendre un autre avec ces colonnes: "movieId", "titre", "compter", "moyenne":

+-------+-----------------------------+-----+-------+
|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 |
+-------+-----------------------------+-----+-------+

De sorte que le fonctionnement que j'ai fait était la suivante:

movie_names_df = info.join(movies_df, info.movieId == movies_df.ID, "inner").select(movies_df.title, info.average, info.movieId, info.count).show()

Le problème est que je reçois le message d'erreur suivant:

AttributeError: 'function' object has no attribute '_get_object_id'

Et je sais que cette erreur se produit parce qu'il considère que info.le comte est une fonction, et non pas un attribut, comme je l'ai défini précédemment.

Donc, comment pourrais-je faire qui se joignent correctement pour obtenir ce que je veux?

Merci beaucoup!

  • Avez-vous essayé d'utiliser les alternatives d'accès à la colonne à l'aide des parenthèses? E. g. info["count"]?
  • Merci!!!! Ça y est! J'ai essayé de le faire en utilisant des parenthèses. 🙂
InformationsquelleAutor jartymcfly | 2016-09-07