web-dev-qa-db-fra.com

Obtenir un champ spécifique de la ligne choisie dans Pyspark DataFrame

J'ai un Spark DataFrame construit via pyspark à partir d'un fichier JSON comme

sc = SparkContext()
sqlc = SQLContext(sc)

users_df = sqlc.read.json('users.json')

Maintenant, je veux accéder à une donnée chose_utilisateur, où c'est son champ _id. Je peux faire

print users_df[users_df._id == chosen_user].show()

et cela me donne la ligne complète de l'utilisateur. Mais supposons que je veuille juste un champ spécifique dans la ligne, disons le sexe de l'utilisateur, comment pourrais-je l'obtenir?

9
mar tin

Il suffit de filtrer et de sélectionner:

result = users_df.where(users_df._id == chosen_user).select("gender")

ou avec col

from pyspark.sql.functions import col

result = users_df.where(col("_id") == chosen_user).select(col("gender"))

Enfin PySpark Row n'est qu'un Tuple avec quelques extensions, vous pouvez par exemple flatMap:

result.rdd.flatMap(list).first()

ou map avec quelque chose comme ceci:

result.rdd.map(lambda x: x.gender).first()
20
zero323