PySpark:TypeError:'Column'对象不可调用

时间:2016-09-07 10:40:33

标签: python apache-spark pyspark spark-dataframe

我正在从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:这是与Jupyter笔记本电脑的Spark 1.4。

2 个答案:

答案 0 :(得分:1)

问题在于isin是在1.5.0版本中添加到Spark中的,因此,如isin here的文档中所示,在您的Spark版本中尚不可用。

1.3.0中引入的Scala API中有一个类似的功能in,具有类似的功能(由于in仅接受列,因此输入存在一些差异)。在PySpark中,此功能称为inSet。文档中的用法示例:

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

注意inSet在1.5.0及更高版本中已被描述,isin在较新的版本中应使用。

答案 1 :(得分:0)

请使用以下代码检查

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