如何过滤具有特定值的列?
这很好>
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 doc和SO也是如此。另外,试着给===
答案 0 :(得分:2)
在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()
答案 1 :(得分:1)
传递给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|
// +---+----------+
答案 2 :(得分:0)
您可以使用<div class="container">
<div class="image-container">
<img class="main-image" src="http://via.placeholder.com/400x400" />
</div>
</div>
运算符和filter / where,如下所示。基本上"==="
是where
的别名。
使用与zero323相同的示例。
filter
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