#pyspark
Вопрос:
У меня есть строка в формате 05/26/2021 11:31:56 для mat, и я хочу преобразовать ее в формат даты, например, 05-26-2021 в pyspark.
Я пробовал ниже, но он преобразует тип столбца в дату, но делает значения нулевыми.
df = df.withColumn("columnname", F.to_date(df["columnname"], 'yyyy-MM-dd'))
еще один, который я пробовал, — это
df = df.withColumn("columnname", df["columnname"].cast(DateType()))
Я также попробовал следующий метод
df = df.withColumn(column.lower(), F.to_date(F.col(column.lower())).alias(column).cast("date"))
но в каждом методе мне удавалось преобразовать тип столбца в дату, но это делает значения нулевыми.
Любое предложение приветствуется
Комментарии:
1. использовать
to_date(df['col'], 'MM/dd/yyyy hh:mm:ss a')
2. Эй @mck Я попробовал тот, который вы предлагаете, я столкнулся с той же проблемой, он изменяет тип данных столбца, но делает данные нулевыми.
3. являются ли исходные данные нулевыми? возможно, вы переписали его в своем коде
4. Нет, исходные данные содержат строковый тип, и я только преобразую их в формат даты, я не выполняю никаких других преобразований в своем коде.
Ответ №1:
# Create data frame like below
df = spark.createDataFrame(
[("Test", "05/26/2021 11:31:56 AM")],
("user_name", "login_date"))
# Import functions
from pyspark.sql import functions as f
# Create data framew with new column new_date with data in desired format
df1 = df.withColumn("new_date", f.from_unixtime(f.unix_timestamp("login_date",'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd').cast('date'))
Комментарии:
1. Эй, это работает, я выполнял работу, как показано ниже df = df.С колонкой(столбец, F. unix_timestamp(столбец, «ММ/дд/ГГГГ чч:мм:сс аа»).приведение(«двойное»).приведение(«метка времени»)) df = df.С колонкой(столбец, F. from_utc_timestamp(столбец, «Z»).приведение(тип даты()))
2. Эй , я принял ваш ответ, Спасибо за помощь @user12345, я только говорил, что использовал два утверждения для достижения того, что вы сделали в одном, я использую ваше утверждение в коде. Еще раз спасибо
Ответ №2:
Приведенный выше ответ, опубликованный @User12345, работает, и приведенный ниже метод также работает
df = df.withColumn(column, F.unix_timestamp(column, "MM/dd/YYYY hh:mm:ss aa").cast("double").cast("timestamp"))
df = df.withColumn(column, F.from_utc_timestamp(column, 'Z').cast(DateType()))