Преобразовать строку в дату в формате 2020-04-21T11: 28: 40.321328 + 00: 00 - PullRequest
1 голос
/ 21 апреля 2020

я работаю со струйной структурой искры, с pyspark.

У меня есть строка в этом формате:

2020-04-21T11:28:40.321328+00:00

Мне нужно изменить формат даты на этот формат гггг-ММ-дд ЧЧ: мм: сс , я пытаюсь сделать это:

date_format(to_timestamp('value.Ticker.time', "yyyy-MM-dd'T'HH:mm:ss.sssssssZ"), "yyyy-MM-dd HH:mm:ss")

Но результат нулевой:

Мой код:

BytesDF_Data_Level_2 = spark \
  .readStream \
  .format("kafka") \
  .option("kafka.bootstrap.servers", "localhost:9092") \
  .option("subscribe", "data_level_2") \
  .load()

StringDF_Data_Level_2 = BytesDF_Data_Level_2.selectExpr("CAST(value AS STRING)")
JsonDF_Data_Level_2 = StringDF_Data_Level_2.withColumn("value", from_json("value", schema_data_level_II))
JsonDF_cols_Data_Level_2 = JsonDF_Data_Level_2.select(
    #col('value.Ticker.contract.Forex.tradingClass'),
    col('value.Ticker.time'),
    date_format(to_timestamp('value.Ticker.time', "yyyy-MM-dd'T'HH:mm:ss.sssssssZ"), "yyyy-MM-dd HH:mm:ss")

    #col('value.Ticker.bid'),
    #col('value.Ticker.bidSize'),
    #col('value.Ticker.ask'),
    #col('value.Ticker.askSize')
    )

query = JsonDF_cols_Data_Level_2.\
    writeStream\
    .outputMode("append")\
    .format("console") \
    .option("truncate", "false") \
    .start()

query.awaitTermination()

Спасибо!

1 Ответ

0 голосов
/ 21 апреля 2020

Попробуйте с to_timestamp (или) from_unixtime(unix_timestamp()) функциями с форматом "yyyy-MM-dd'T'HH:mm:ss"

df.withColumn("new_time", to_timestamp(col("time"),"yyyy-MM-dd'T'HH:mm:ss")).show(10,False)
#+--------------------------------+-------------------+
#|time                            |new_time           |
#+--------------------------------+-------------------+
#|2020-04-21T11:28:40.321328+00:00|2020-04-21 11:28:40|
#+--------------------------------+-------------------+

#using date_format
df.withColumn("new_time", date_format(to_timestamp(col("time"),"yyyy-MM-dd'T'HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")).show(10,False)
#+--------------------------------+-------------------+
#|time                            |new_time           |
#+--------------------------------+-------------------+
#|2020-04-21T11:28:40.321328+00:00|2020-04-21 11:28:40|
#+--------------------------------+-------------------+

#using from_unixtime, unix_timestamp functions
df.withColumn("new_time", from_unixtime(unix_timestamp(col("time"),"yyyy-MM-dd'T'HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")).show(10,False)
#+--------------------------------+-------------------+
#|time                            |new_time           |
#+--------------------------------+-------------------+
#|2020-04-21T11:28:40.321328+00:00|2020-04-21 11:28:40|
#+--------------------------------+-------------------+

For Spark-3:

df.withColumn("new_time",to_timestamp((col('time').substr(1, 19)) ,"yyyy-MM-dd'T'HH:mm:ss")).show(10,False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...