Преобразование StringType в TimestampType в Spark 3.0 - PullRequest
0 голосов
/ 03 августа 2020

Я использовал pyspark 3.0. У меня есть фреймворк со столбцом «время» в StringType. Я пытаюсь преобразовать это в метку времени. Фрейм данных выглядит так.

+---------------+
|           time|
+---------------+
|10:59:46.000 AM|
| 6:26:36.000 PM|
|11:13:38.000 PM|
+---------------+

Я пробовал как to_timestamp (), так и unix_timestamp.

df.withColumn("new_time", F.to_timestamp(col("time"),"hh:mm:ss.SSS a")).show()

.

df.withColumn('new_time', F.unix_timestamp(inputDF['time'], 'hh:mm:ss.SSS a').cast(TimestampType())).show()

Я получаю ошибку это.

org.apache.spark.SparkUpgradeException: You may get a different result due to the upgrading of Spark 3.0: Fail to parse '6:26:36.000 PM' in the new parser. You can set spark.sql.legacy.timeParserPolicy to LEGACY to restore the behavior before Spark 3.0, or set to CORRECTED and treat it as an invalid datetime string.

Я хочу знать, как это делается в Spark 3.0 без настройки

spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")

Любая помощь будет очень принята. Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Попробуйте это -

df.withColumn("new_time", F.to_timestamp(F.lpad(col("time"), 15, "0"),"hh:mm:ss.SSS a")).show()

some Explanation

1. lpad(column, length, "<string_to_be_padded>")-

Эта функция проверяет length указанной строки и оставит отступ с string_to_be_padded, если длина строки <указанной длины. </p>

Example

входная строка 6:26:36.000 PM имеет только 14 символов, и, поскольку указанная длина равна 15, он оставит pad 0 (третий аргумент), чтобы сделать его длиной 15. Теперь o / p od lpad равно 06:26:36.000 PM. это соответствует нашему формату, указанному в to_timestamp

Подробнее здесь

1 голос
/ 03 августа 2020

Нет необходимости в заполнении ..

Вам нужно изменить формат строки преобразования .. Удалите из нее «h», и тогда она будет работать.

df.withColumn('new_time', f.unix_timestamp(df['Timestamp'], 'h:mm:ss.SSS a'))

объяснение на формат:

'hh:mm:ss.SSS a'
01:00:00.000 pm
11:00:00.000 am

'h:mm:ss.SSS a'
1:00:00.000 pm
11:00:00.000 am
...