Пользовательское преобразование столбца PySpark TimestampType - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь преобразовать столбец String, который по сути является датой, в столбец TimestampType, однако у меня возникают проблемы с разделением значения.

-RECORD 0-------------------------------------
 year                        | 2016           
 month                       | 4                         
 arrival_date                | 2016-04-30         
 date_added                  | 20160430           
 allowed_date                | 10292016       

У меня есть 3 столбца, все в разных форматах, поэтому я пытаюсь найти способ разделить строку произвольным образом, поскольку столбец date_added - ггггммдд, а allowed_date - ммддгггг.

Я пробовал что-то вроде:

df_imigration.withColumn('cc'.F.date_format(df_imigration.allowed_date.cast(dataType=t.TimestampType()), "yyyy-mm-dd"))

Но безуспешно, и я как бы застрял, пытаясь найти правильный или лучший способ решить эту проблему.

Псевдонимы t и F предназначены для следующего импорта:

from pyspark.sql import functions as F
from pyspark.sql import types as t

1 Ответ

1 голос
/ 30 апреля 2020

Проблема с вашим кодом в том, что вы приводите дату без указания формата даты. Чтобы указать формат, вы должны использовать функцию to_timestamp (). Здесь я создал фрейм данных с тремя различными форматами, и он работал.

df1 = spark.createDataFrame([("20201231","12312020","31122020"), ("20201231","12312020","31122020" )], ["ID","Start_date","End_date"])

df1=df1.withColumn('cc',f.date_format(f.to_timestamp(df1.ID,'yyyymmdd'), "yyyy-mm-dd"))
df1=df1.withColumn('dd',f.date_format(f.to_timestamp(df1.Start_date,'mmddyyyy'), "yyyy-mm-dd"))
df1.withColumn('ee',f.date_format(f.to_timestamp(df1.End_date,'ddmmyyyy'), "yyyy-mm-dd")).show()

Вывод:

+--------+----------+--------+----------+----------+----------+
|      ID|Start_date|End_date|        cc|        dd|        ee|
+--------+----------+--------+----------+----------+----------+
|20201231|  12312020|31122020|2020-12-31|2020-12-31|2020-12-31|
|20201231|  12312020|31122020|2020-12-31|2020-12-31|2020-12-31|
+--------+----------+--------+----------+----------+----------+

Надеюсь, это поможет!

...