Je charge des données à partir de HDFS, que je veux filtrer par variables spécifiques. Mais de toute façon, la commande Column.isin ne fonctionne pas. Il jette cette erreur:
TypeError: l'objet 'Column' n'est pas appelable
from pyspark.sql.functions import udf, col
variables = ('852-PI-769', '812-HC-037', '852-PC-571-OUT')
df = sqlContext.read.option("mergeSchema", "true").parquet("parameters.parquet")
same_var = col("Variable").isin(variables)
df2 = df.filter(same_var)
Le schéma ressemble à ceci:
df.printSchema()
root
|-- Time: timestamp (nullable = true)
|-- Value: float (nullable = true)
|-- Variable: string (nullable = true)
Une idée de ce que je fais mal? PS: C’est Spark 1.4 avec Jupyter Notebook.
Le problème est que isin
a été ajouté à Spark dans la version 1.5.0 et n’est donc pas encore disponible dans votre version de Spark, comme indiqué dans la documentation de isin
ici .
Il existe une fonction similaire in
dans l'API Scala introduite dans la version 1.3.0, qui possède une fonctionnalité similaire (il existe certaines différences dans les entrées puisque in
accepte uniquement les colonnes). Dans PySpark, cette fonction s'appelle plutôt inSet
. Exemples d'utilisation de la documentation:
df[df.name.inSet("Bob", "Mike")] df[df.age.inSet([1, 2, 3])]
Note: inSet
est dépossédé de la version 1.5.0 et suivant, isin
devrait être utilisé dans les versions plus récentes.
Veuillez utiliser le code ci-dessous pour vérifier
df.filter(df.Variable.isin(['852-PI-769', '812-HC-037', '852-PC-571-OUT']))