Spark 数据帧检查相等性和筛选



如何过滤具有特定值的列?

这工作正常>

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|
// +---+----------+

您可以将"==="运算符与过滤器/其中一起使用,如下所示。 基本上wherefilter的别名。

使用与 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| +---+----------+

相关内容

  • 没有找到相关文章

最新更新