PYSPARK - UDF (Nutzerdefinierte Funktion anwendenPython

Python-Programme
Anonymous
 PYSPARK - UDF (Nutzerdefinierte Funktion anwenden

Post by Anonymous »

Ich bin ziemlich neu im PySpark, obwohl häufiger Benutzer von Pandas usw. < /p>
Ich habe einen Spark -Datenrahmen, der aus Spalten besteht: ID, Trajektorie, Typ < /p>
wobei die ID eine Ganzzahl ist, Trajektorie ist eine Liste von Datenframe-Reihen, die die Koordinateninformation enthalten, und der Typ ist eine Liste von Zeichenfolgen < /p>
Das Ziel ist zu, Zeichnen Sie für jede ID eine Polylinie in einer Python-Folium-Map, basierend auf den Koordinaten in der Trajektorienspalte. >

Code: Select all

df.first()
erzeugt das folgende Ergebnis

Code: Select all

Row(ID=209223000, Trajectory=[Row(Timestamp=datetime.datetime(2024, 11, 1, 2, 58, 29), Latitude=55.108018, Longitude=18.306343, Destination='Unknown'), Row(Timestamp=datetime.datetime(2024, 11, 1, 6, 18, 18), Latitude=55.115625, Longitude=18.103083, Destination='Unknown')], types=['Undefined'])
< /code>
Um klar zu sein, muss ich keinen zusätzlichen Spalte zum DataFrame hinzufügen, und keine Einwände, wenn dies erforderlich ist. < /p>
Also würde der Pseudo etwas aussehen, das das ist: < /p>
create map-object m

For each Row in df:
create polyline object ply
ply.coordinates = [item.Lat,item.Long] for item in Row['Trajectory']
ply.tooltip = Row['ID'] + Row[types]
add ply to m
< /code>
Das Endziel besteht darin, die Spuren von Objekten zu präsentieren, abhängig von bestimmten Filtern, die im DataFrame < /p>
angewendet werden. Der beschriebene Pseudocode, aber ich kann meinen Kopf nicht darum einwickeln, wie man den UDF anwendet, da ein UDF eher auf eine Spalte als auf einen Datenrahmen angewendet wird. Polylines zum MAP-Objekt basierend auf jeder Zeile des Datenrahmens, z. Jede einzelne ID.|-- ID: integer (nullable = true)
|-- Trajectory: array (nullable = false)
|    |-- element: struct (containsNull = false)
|    |    |-- Timestamp: timestamp (nullable = true)
|    |    |-- Latitude: double (nullable = true)
|    |    |-- Longitude: double (nullable = true)
|    |    |-- Destination: string (nullable = true)
|-- types: array (nullable = false)
|    |-- element: string (containsNull = false)
< /code>
Ein Snapshot (komprimiert) der Daten: < /p>
+---------+--------------------+--------------------+
|     ID  |          Trajectory|               types|
+---------+--------------------+--------------------+
|209223000|[{2024-11-01 02:5...|         [Undefined]|
|209508000|[{2024-11-01 08:2...| [Tanker, Undefined]|
|209864000|[{2024-11-01 14:4...|[Passenger, Undef...|
|210095000|[{2024-11-01 08:2...|[Passenger, Undef...|
|210350000|[{2024-11-01 00:0...|         [Undefined]|
+---------+--------------------+--------------------+

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post