comment filtrer une étincelle dataframe par un booléen colonne
J'ai créé un dataframe qui a le schéma suivant:
In [43]: yelp_df.printSchema()
root
|-- business_id: string (nullable = true)
|-- cool: integer (nullable = true)
|-- date: string (nullable = true)
|-- funny: integer (nullable = true)
|-- id: string (nullable = true)
|-- stars: integer (nullable = true)
|-- text: string (nullable = true)
|-- type: string (nullable = true)
|-- useful: integer (nullable = true)
|-- user_id: string (nullable = true)
|-- name: string (nullable = true)
|-- full_address: string (nullable = true)
|-- latitude: double (nullable = true)
|-- longitude: double (nullable = true)
|-- neighborhoods: string (nullable = true)
|-- open: boolean (nullable = true)
|-- review_count: integer (nullable = true)
|-- state: string (nullable = true)
Maintenant, je veux sélectionner uniquement les enregistrements avec le "ouverte" de la colonne qui est "vrai". Comme indiqué ci-dessous, beaucoup d'entre eux sont "ouverts".
business_id cool date funny id stars text type useful user_id name full_address latitude longitude neighborhoods open review_count state
9yKzy9PApeiPPOUJE... 2 2011-01-26 0 fWKvX83p0-ka4JS3d... 4 My wife took me h... business 5 rLtl8ZkDX5vH5nAx9... Morning Glory Cafe 6106 S 32nd St Ph... 33.3907928467 -112.012504578 [] true 116 AZ
ZRJwVLyzEJq1VAihD... 0 2011-07-27 0 IjZ33sJrzXqU-0X6U... 4 I have no idea wh... business 0 0a2KyEL0d3Yb1V6ai... Spinato's Pizzeria 4848 E Chandler B... 33.305606842 -111.978759766 [] true 102 AZ
6oRAC4uyJCsJl1X0W... 0 2012-06-14 0 IESLBzqUCLdSzSqm0... 4 love the gyro pla... business 1 0hT2KtfLiobPvh6cD... Haji-Baba 1513 E Apache Bl... 33.4143447876 -111.913032532 [] true 265 AZ
_1QQZuf4zZOyFCvXc... 1 2010-05-27 0 G-WvGaISbqqaMHlNn... 4 Rosie, Dakota, an... business 2 uZetl9T0NcROGOyFf... Chaparral Dog Park 5401 N Hayden Rd ... 33.5229454041 -111.90788269 [] true 88 AZ
6ozycU1RpktNG2-1B... 0 2012-01-05 0 1uJFq2r5QfJG_6ExM... 4 General Manager S... business 0 vYmM4KTsC8ZfQBg-j... Discount Tire 1357 S Power Road... 33.3910255432 -111.68447876 [] true 5 AZ
Cependant la commande suivante, je suis à court pyspark ne retourne rien:
yelp_df.filter(yelp_df["open"] == "true").collect()
Quelle est la bonne façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Vous êtes en comparant les types de données de manière incorrecte.
open
est répertorié comme une valeur Booléenne, pas une chaîne, afin de faireyelp_df["open"] == "true"
est incorrect -"true"
est une chaîne de caractères.Au lieu de cela, vous voulez faire
Correctement compare les valeurs de
open
contre le Booléen primitiveTrue
, plutôt que de la non-Boolean string"true"
.comparison to True should be 'if cond is True:' or 'if cond:'flake8(E712)
. Autant que j'ai testé,yelp_df.filter(yelp_df["open"]).collect()
se comporte de la même et est plus sûr/plus-pythonic.Spark - Scala, je pense à deux approches
Approche 1 :Spark commande sql pour obtenir tous les bool colonnes par la création d'une situation temporaire et en sélectionnant uniquement les colonnes Booléennes à partir de l'ensemble de la dataframe. Toutefois, cela exige Boolean colonnes ou fteching columsn de schéma basé sur le type de données
Approche 2 : Filtre le dataframe si le schéma est défini