1

Ich versuche, Daten, die in eine bestimmte Fensterperiode passen, mit Spark Structured Streaming zu gruppieren.Fensteroperationen in Datumsspalte in Spark Structured Streaming

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] 

Das Format des Datums aus dem rawProfiles ist eine Zeichenfolge wie folgt:

2017-07-20 18:27:45

Was für die Datumsspalte zurückgegeben nach dem Fenster Aggregation etwas wie folgt aus:

[0,554c749fb8a00,554c76dbed000]

Ich bin nicht wirklich sicher, was ich damit machen soll. Hat jemand irgendwelche Ideen?

+0

Blick in die Datumsspalte werfen, bevor Sie Funken interpretieren lassen .. – Gyan

+0

Ich habe versucht, es auf den neuesten Stand zu bringen und das hat nicht funktioniert. Ich versuchte dann, ein udf zu verwenden, um es zu einem Datum zu ändern, indem ich das Format festlegte. Immer noch kein Glück. Ich bin mir nicht sicher, was ich sonst noch versuchen sollte. –

Antwort

1

Sie können Ihr Datumsfeld wie folgt neu formatieren;

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] 
Verwandte Themen