我正在从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。
答案 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']))