我的数据框df
包含以下列:
ts: Timestamp
val: String
从我的主df中,我想选择仅匹配某个ts
值的数据帧。我可以使用between
来实现这一点:
df.filter($"ts".between(targetDate, targetDate))
这里targetDate
是我要过滤我的df的日期。是否有等效equal
,例如df.filter($"ts".equal(targetDate))
?
答案 0 :(得分:2)
正如您在Column's documentation中所看到的,您可以使用ADCBE
方法将列的值与===
类型的变量进行比较。
Any
如果您想明确可以替换的类型
val df = sc.parallelize(
("2016-02-24T22:54:17Z", "foo") ::
("2010-08-01T00:00:12Z", "bar") ::
Nil
).toDF("ts", "val").withColumn("ts", $"ts".cast("timestamp"))
df.where($"ts" === "2010-08-01T00:00:12Z").show(10, false)
// +---------------------+---+
// |ts |val|
// +---------------------+---+
// |2010-08-01 02:00:12.0|bar|
// +---------------------+---+
与
=== "2010-08-01T00:00:12Z"
还有针对Java互操作性的=== lit("2010-08-01T00:00:12Z").cast("timestamp")
方法:
Column.equalTo
最后,Spark支持 df.where($"ts".equalTo("2010-08-01T00:00:12Z")).show(10, false)
安全等式运算符(NULL
,<=>
),但这些需要Spark&lt;中的笛卡尔积。 1.6(见SPARK-11111)。