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?
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()