2017-06-29 2 views
1

Es gibt eine Tabelle mit Vorfällen und einem bestimmten Zeitstempel. Ich habe Mühe, die Anzahl der Tage zu berechnen, die mit der Pyspark 2.0-API vergangen sind. Ich schaffte es, das Gleiche zu tun, wenn der Zeitstempel ein anderes Format (yyyy-mm-dd)Pyspark: Unterschied zwischen zwei Daten (Cast TimestampType, Datediff)

gefolgt
+-------------------+------------------------+----------+--------------+ 
    | first_booking_date|first_booking_date_clean| today |customer_since| 
    +-------------------+------------------------+----------+--------------+ 
    |02-06-2011 20:52:04|    02-06-2011|02-06-2011|   null| 
    |03-06-2004 18:15:10|    03-06-2004|02-06-2011|   null| 

Ich habe versucht, die folgenden (nichts funktioniert): - Extrakt Datum mit String-Manipulation und verwenden datediff - cast timestamp und dann extrahieren dd: MM: yy (-> Ergebnis null) - Ich bevorzuge pyspark Befehle über jede zusätzliche Transformation mit SQL

Hilfe wird sehr geschätzt, Beste und vielen Dank !!!

EDIT: Hier ist ein Beispiel, das nicht funktioniert:

import datetime 
today = datetime.date(2011,2,1) 
today = "02-06-2011" 
first_bookings = first_bookings.withColumn("today",F.lit(today)) 
first_bookings = first_bookings.withColumn("first_booking_date_clean",F.substring(first_bookings.first_booking_date, 0, 10)) 
first_bookings = first_bookings.withColumn("customer_since",F.datediff(first_bookings.today,first_bookings.first_booking_date_clean)) 
+0

Gerne weitere Informationen bei Bedarf hinzufügen! –

+0

https://Stackoverflow.com/a/36985244/4219202 Sehen Sie sich diese Antwort auf eine ähnliche Frage an. In Ihrem Fall wäre die timeFmt "dd-MM-yyyy" für die Spalten first_booking_date_clean und today – Zephro

+1

Mögliches Duplikat von [Berechnung der Dauer durch Subtraktion zweier datetime-Spalten im String-Format] (https://stackoverflow.com/questions/30283415/calculating -Zeit durch Subtrahieren-zwei-datetime-Spalten-in-String-Format) – sdikby

Antwort

1

Diese Antwort ist im Grunde eine Kopie von https://stackoverflow.com/a/36985244/4219202 In Ihrem Fall die TimeFmt würde "dd-MM-yyyy" sein für die Spalten first_booking_date_clean und heute

Ab 1.5 Funken können Sie unix_timestamp verwenden:

from pyspark.sql import functions as F 
timeFmt = "yyyy-MM-dd'T'HH:mm:ss.SSS" 
timeDiff = (F.unix_timestamp('EndDateTime', format=timeFmt) 
      - F.unix_timestamp('StartDateTime', format=timeFmt)) 
df = df.withColumn("Duration", timeDiff) 
Verwandte Themen