我正在从HDFS加载数据,我想通过特定变量过滤。但不知怎么的,纵队。Isin命令不起作用。它抛出以下错误:
TypeError: 'Column' object is not callable
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与Jupyter笔记本。
问题是isin
是在1.5.0版本中添加到Spark的,因此在您的Spark版本中还没有isin
的文档。
Scala API中有一个类似的函数in
,它在1.3.0中引入,具有类似的功能(由于in
只接受列,因此在输入方面存在一些差异)。在PySpark中,这个函数被称为inSet
。文档中的用法示例:
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']))