特定の変数でフィルタリングしたい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です。
問題は、isin
がSparkにバージョン1.5.0で追加されたため、お使いのバージョンのSpark= isin
here のドキュメント。
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
は新しいバージョンで使用する必要があります。
以下のコードを使用して確認してください
df.filter(df.Variable.isin(['852-PI-769', '812-HC-037', '852-PC-571-OUT']))