2017-08-11 66 views
1

我正在嘗試使用Spark結構化數據流將數據適合指定的窗口期間。Spark結構化數據流中日期列上的窗口操作

val profiles = rawProfiles.select("*") 
    .groupBy(window($"date", "10 minutes", "5 minutes").alias("date"), $"id", $"name") 
    .agg(sum("value").alias("value")) 
    .join(url.value, Seq("url"), "left") 
    .where("value > 20") 
    .as[profileRecord] 

從rawProfiles日期的格式是這樣的字符串:

2017年7月20日18點27分45秒

什麼是返回的日期列在窗口聚合之後是這樣的:

[0,554c749fb8a00,554c76dbed000]

我不太確定該怎麼做。有沒有人有任何想法?

+0

看着鑄造的日期列,然後讓你的火花解釋它.. – Gyan

+0

我試圖將它施放到日期,並沒有工作。然後我嘗試使用udf通過指定格式將其更改爲日期。仍然沒有運氣。我不知道還有什麼可以嘗試的。 –

回答

1

你可以重新格式化你的日期字段如下;

rawProfiles.select(<your other fields>,to_date(unix_timestamp($"date").cast(DataTypes.TimestampType)).as("date"))).groupBy(window($"date", "10 minutes", "5 minutes").alias("date"), $"id", $"name") 
.agg(sum("value").alias("value")) 
.join(url.value, Seq("url"), "left") 
.where("value > 20") 
.as[profileRecord]