Spark 1.5.2:在Scala中过滤数据帧

时间:2016-02-25 22:32:38

标签: scala apache-spark dataframe apache-spark-sql

我的数据框df包含以下列:

ts: Timestamp
val: String

从我的主df中,我想选择仅匹配某个ts值的数据帧。我可以使用between来实现这一点: df.filter($"ts".between(targetDate, targetDate))这里targetDate是我要过滤我的df的日期。是否有等效equal,例如df.filter($"ts".equal(targetDate))

1 个答案:

答案 0 :(得分:2)

正如您在Column's documentation中所看到的,您可以使用ADCBE方法将列的值与===类型的变量进行比较。

=== Method

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)。