如何过滤具有特定值的列?
这工作正常>
scala> dataframe.filter("postalCode > 900").count()
但==
失败
scala> dataframe.filter("postalCode == 900").count()
java.lang.RuntimeException: [1.13] failure: identifier expected
postalCode == 900 ##Error line
我知道我错过了一些明显的东西,但我无法弄清楚。我检查了 API 文档和 SO 是否相同。另外,尝试给===
在python
中,可以这样处理(使用@zero323数据(:
df = sqlContext.createDataFrame(sc.parallelize(
[("foo", 900), ("bar", 100)]),
StructType([
StructField("k", StringType(), True),
StructField("v", IntegerType(), True)
])
)
filtered_df = df.where(df.v == 900)
filtered_df.show()
传递给 filter
/where
的表达式字符串应该是有效的 SQL 表达式。这意味着您必须使用单个等号运算符:
dataframe.filter("postalCode = 900")
和例子
val df = sc.parallelize(Seq(("foo", 900), ("bar", 100))).toDF("k", "postalCode")
df.where("postalCode = 900").show
// +---+----------+
// | k|postalCode|
// +---+----------+
// |foo| 900|
// +---+----------+
您可以将"==="
运算符与过滤器/其中一起使用,如下所示。 基本上where
是filter
的别名。
使用与 zero323 相同的示例。
val df = sc.parallelize(Seq(("foo", 900), ("bar", 100))).toDF("k", "postalCode")
df.where($"postalCode" === 900).show
+---+----------+
| k|postalCode|
+---+----------+
|foo| 900|
+---+----------+
df.filter($"postalCode" === 900).show
+---+----------+
| k|postalCode|
+---+----------+
|foo| 900|
+---+----------+
df.filter(df("postalCode") === 900).show
+---+----------+
| k|postalCode|
+---+----------+
|foo| 900|
+---+----------+