2016-02-25 227 views
1

過濾一個數據幀我有一個數據幀df有以下的列:星火1.5.2:在斯卡拉

ts: Timestamp 
val: String 

從我的主人東風,我要選擇dataframes,只有符合特定ts值。我可以使用between來達到這個效果,例如: df.filter($"ts".between(targetDate, targetDate))這裏targetDate是我想過濾我的DF的日期。是否有相當於equal,如df.filter($"ts".equal(targetDate))

回答

2

正如您在Column's documentation中看到的那樣,可以使用===方法將列的值與Any變量類型進行比較。

=== Method

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" 

=== lit("2010-08-01T00:00:12Z").cast("timestamp") 

還有Column.equalTo方法專爲Java的互操作性:

df.where($"ts".equalTo("2010-08-01T00:00:12Z")).show(10, false) 

最後星火支持NULL安全相等運算符(<=>Column.eqNullSafe),但這些都需要笛卡爾乘積在星火< 1.6(見SPARK-11111)。

+0

@AlbertoBonsanto AFAIK沒有。您可以鏈接Java文檔。另外,可以回滾到包含空安全信息並在其上編輯的以前版本? – zero323

+0

我不說你做:)當你檢查歷史([點擊編輯...](https://stackoverflow.com/posts/35640010/revisions))並去特定的編輯有一個回滾鏈接。你甚至會得到一個徽章;) – zero323

+0

@AlbertoBonsanto謝謝! – zero323