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. 🙂
Vous devez vous connecter pour publier un commentaire.
L'ajout de commentaire comme réponse, car il a résolu le problème.
count
est un peu un mot clé protected dans DataFrame de l'API, donc nommer les colonnes compter est dangereux. Dans votre cas, vous pouvez contourner l'erreur en n'utilisant pas la notation par points, mais le support de colonne de base de l'accès, par exemplealias
. Merci pour cette réponse!