2016-07-02 9 views
4

ich eine Tabelle mit der folgenden StrukturDatum Differenz zwischen aufeinander folgenden Reihen - Pyspark Dataframe

USER_ID  Tweet_ID     Date 
    1   1001  Thu Aug 05 19:11:39 +0000 2010 
    1   6022  Mon Aug 09 17:51:19 +0000 2010 
    1   1041  Sun Aug 19 11:10:09 +0000 2010 
    2   9483  Mon Jan 11 10:51:23 +0000 2012 
    2   4532  Fri May 21 11:11:11 +0000 2012 
    3   4374  Sat Jul 10 03:21:23 +0000 2013 
    3   4334  Sun Jul 11 04:53:13 +0000 2013 

Im Grunde, was ich möchte, ist zu tun haben, eine PysparkSQL Abfrage, die die Datumsdifferenz berechnet (in Sekunden) für aufeinanderfolgende Datensätze mit derselben Benutzer-ID-Nummer. Das erwartete Ergebnis wäre:

1  Sun Aug 19 11:10:09 +0000 2010 - Mon Aug 09 17:51:19 +0000 2010  839930 
1  Mon Aug 09 17:51:19 +0000 2010 - Thu Aug 05 19:11:39 +0000 2010  340780 
2  Fri May 21 11:11:11 +0000 2012 - Mon Jan 11 10:51:23 +0000 2012  1813212 
3  Sun Jul 11 04:53:13 +0000 2013 - Sat Jul 10 03:21:23 +0000 2013  5510 

Antwort

2

So:

df.registerTempTable("df") 

sqlContext.sql(""" 
    SELECT *, CAST(date AS bigint) - CAST(lag(date, 1) OVER (
       PARTITION BY user_id ORDER BY date) AS bigint) 
    FROM df""") 
+3

Ein anderer Weg: df.withColumn ("time_intertweet" (df.date. cast ("bigint") - Verzögerung (df.date.cast ("bigint"), 1) .over (Window.partitionBy ("user_id"). orderBy ("Datum"))). cast ("bigint")) – Joss

+0

@Joss Könnten Sie das zur Antwort hinzufügen? Ich habe es in Wiki umgewandelt. Vielen Dank. –

4

Eine andere Möglichkeit könnte sein:

df.withColumn("time_intertweet",(df.date.cast("bigint") - lag(df.date.cast("bigint"), 1) 
.over(Window.partitionBy("user_‌​id") 
.orderBy("date")‌​)) 
.cast("bigint")) 
Verwandte Themen