Ich habe einen Datenrahmen mit mehreren Spalten, von denen zwei vom Typ pyspark.sql.TimestampType
sind. Ich möchte diesen Datenrahmen in Zeilen filtern, in denen der Zeitunterschied zwischen diesen beiden Spalten weniger als eine Stunde beträgt.Filter pyspark Dataframe basierend auf dem Zeitunterschied zwischen zwei Spalten
Ich versuche zur Zeit, dies zu tun, wie so: examples = data.filter((data.tstamp - data.date) < datetime.timedelta(hours=1))
Aber das schlägt mit der folgenden Fehlermeldung:
org.apache.spark.sql.AnalysisException: cannot resolve '(`tstamp` - `date`)' due to data type mismatch: '(`tstamp` - `date`)' requires (numeric or calendarinterval) type, not timestamp
Was ist die richtige Methode, um diese Filter zu erreichen?
Die Spalten nicht unterschiedliche Typen sind, sondern beide Typ 'pyspark.sql.TimestampType' – vaerek
Zusätzlich sind, sind diese DATETI Ich Objekte, so dass die 'unix_timestamp' Funktion nicht funktioniert, da es auf String-Eingabe arbeitet. Ich denke, ich könnte sie von Datum zu String umwandeln und sie dann durch 'unix_timestamp' laufen lassen. Ich frage mich, ob es einen einfacheren Weg gibt. – vaerek
In pyspark haben wir nicht Zugriff auf alle Datetime-Funktionen von Python, die einzige andere Funktion für Zeitunterschiede ist datediff für Tage. Wenn Sie also keine UDF schreiben, die weniger effizient ist als eine reine Pyspark-Lösung, müssen Sie eine Zeitstempeldifferenz verwenden, indem Sie sie in "int" umwandeln. – MaFF