Spark数据帧检查相等和过滤

时间:2015-11-11 13:54:21

标签: sql apache-spark apache-spark-sql

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

这很好>

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也是如此。另外,试着给===

3 个答案:

答案 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