J'utilise spark 2.1.0. Je ne suis pas en mesure de créer une colonne d'horodatage dans pyspark J'utilise l'extrait de code ci-dessous. Veuillez aider

df=df.withColumn('Age',lit(datetime.now()))

Je reçois

erreur d'assertion: col doit être une colonne

Veuillez aider

11
Naveen Srikanth 2 août 2017 à 22:28

2 réponses

Meilleure réponse

En supposant que vous ayez une trame de données de votre extrait de code et que vous vouliez le même horodatage pour toutes vos lignes.

Permettez-moi de créer une trame de données factice.

>>> dict = [{'name': 'Alice', 'age': 1},{'name': 'Again', 'age': 2}]
>>> df = spark.createDataFrame(dict)

>>> import time
>>> import datetime
>>> timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
>>> type(timestamp)
<class 'str'>

>>> from pyspark.sql.functions import lit,unix_timestamp
>>> timestamp
'2017-08-02 16:16:14'
>>> new_df = df.withColumn('time',unix_timestamp(lit(timestamp),'yyyy-MM-dd HH:mm:ss').cast("timestamp"))
>>> new_df.show(truncate = False)
+---+-----+---------------------+
|age|name |time                 |
+---+-----+---------------------+
|1  |Alice|2017-08-02 16:16:14.0|
|2  |Again|2017-08-02 16:16:14.0|
+---+-----+---------------------+

>>> new_df.printSchema()
root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)
 |-- time: timestamp (nullable = true)
11
Ankush Singh 2 août 2017 à 20:22

Je ne suis pas sûr pour 2.1.0, au moins sur 2.2.1 vous pouvez simplement:

from pyspark.sql import functions as F
df.withColumn('Age', F.current_timestamp())

J'espère que cela aide!

10
balalaika 28 mars 2019 à 17:45