Spark 数据帧检查相等性和过滤
Spark dataframe checking equality and filtering
如何过滤具有特定值的列?
这很好>
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 是否相同。另外,尝试给出 ===
您传递给 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|
// +---+----------+
在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 一起使用,如下所示。基本上 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|
+---+----------+
如何过滤具有特定值的列?
这很好>
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 是否相同。另外,尝试给出 ===
您传递给 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|
// +---+----------+
在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 一起使用,如下所示。基本上 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|
+---+----------+