web-dev-qa-db-ja.com

PySpark:TypeError: 'Column'オブジェクトは呼び出し不可能です

特定の変数でフィルタリングしたいHDFSからデータをロードしています。しかし、どういうわけか、Column.isinコマンドは機能しません。それはこのエラーを投げます:

TypeError: 'Column'オブジェクトは呼び出し不可能です

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)

スキーマは次のようになります。

df.printSchema()
root
 |-- Time: timestamp (nullable = true)
 |-- Value: float (nullable = true)
 |-- Variable: string (nullable = true)

私は何が間違っているのでしょうか? PS:これは、Spark 1.4 with Jupyter Notebookです。

8
Matthias

問題は、isinがSparkにバージョン1.5.0で追加されたため、お使いのバージョンのSpark= isinhere のドキュメント。

1.3.0で導入されたScala APIには同様の機能 in があり、同様の機能があります(いくつかの違いがあります) in以降の入力は列のみを受け入れます。PySparkでは、この関数は inSet insteadと呼ばれます。ドキュメントの使用例:

df[df.name.inSet("Bob", "Mike")]
df[df.age.inSet([1, 2, 3])]

inSetはバージョン1.5.0以降では廃止されています。isinは新しいバージョンで使用する必要があります。

1
Shaido

以下のコードを使用して確認してください

df.filter(df.Variable.isin(['852-PI-769', '812-HC-037', '852-PC-571-OUT']))
0
PSR