Как изменить строку на временную метку в Pyspark?

#python #apache-spark #pyspark #apache-spark-sql

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

Я пытаюсь изменить строку на time_stamp в pyspark (версия Spark = 2.3.0) с помощью приведенного ниже набора данных и api

Я пытался использовать разрешение, отличное от stack overflow, но ничто не могло помочь изменить значение time_stamp

 df:
|Customer|Transaction_Timestamp|Transaction_Base_Point_Value|
 -------- --------------------- ---------------------------- 
|Cust1   |10/25/2017 1:47      |2000                        |
  

Попытка 1

 df2 = df.select('Customer', 'Transaction_Timestamp','Transaction_Base_Point_Value', unix_timestamp('Transaction_Timestamp', "dd/MM/yy HH:mm") .cast(TimestampType()).alias("Timestamp")).show(1, False)
  

Попытка 2

 df.withColumn('Time', to_timestamp("Transaction_Timestamp", "yyyy_MM_dd hh_mm_ss").cast("Timestamp"))
  

Попытка 3

 change_type= df.withColumn('Timestamp', col='Transaction_Timestamp').cast('timestamp')
  

Однако схема выдает следующий вывод

  |-- Timestamp: timestamp (nullable = true)
  

Мне нужно получить вывод следующим образом, чтобы я мог выполнить другую операцию с временной меткой

 |Customer|Transaction_Timestamp|Transaction_Base_Point_Value|Timestamp|
 -------- --------------------- ---------------------------- --------- 
|   Cust1|      10/25/2017 1:47|                        2000|     10/25/2017 1:47|
  

Ответ №1:

используйте to_timestamp из pyspark.sql.functions

 .withColumn('Timestamp', to_timestamp('Transaction_Timestamp', 'MM/dd/yyyy hh:mm'))
  

также было бы неплохо иметь дополненное значение часа, не 1:47 но 01:47

Комментарии:

1. Привет, Кендока, спасибо за твой реплей. Однако вышеупомянутое решение у меня не сработало. Временная метка по-прежнему выдает нулевые значения, даже если схема была изменена.

2. вы можете попробовать col("Transaction_Timestamp").cast("Timestamp") Интересно, изменит ли что-нибудь строка времени с заполнением нулем…