pyspark: удаление миросекунды из отметки времени - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю над сценарием pyspark, и одно из необходимых преобразований заключается в преобразовании метки времени в микросекундах в метки времени в секундах -

  1. Считать файл паркета как ввод

  2. Определите, является ли какой-либо столбец меткой времени (будет в микросекундах)

    Example - 2019-03-30 19:56:14.520138
    
  3. Если да, преобразуйте его в 'гггг-мм-дд чч: mm: ss 'format

    After conversion - 2019-03-30 19:56:14
    
  4. Запись кадра данных в формате паркета обратно в s3.

Я пробовал, ниже, но это не работает Возвращенный кадр данных по-прежнему показывает микросекунды.

df = spark.read.parquet(p_input_loc)

def customize_df(df):
    getTimestampCol = list(
                filter(lambda x: "timestamp" in x, df.dtypes))
    print(getTimestampCol)
    """[('created_at', 'timestamp'), ('updated_at', 'timestamp')]"""
    if getTimestampCol:
        for row in getTimestampCol:
            df = df.withColumn(row[0], f.to_timestamp(row[0], 'yyyy-mm-dd hh:mm:ss'))
        return df
    else:
        return df

Так что мне нужна помощь !!

1 Ответ

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

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

Вот пример

df2 = spark.createDataFrame([("2020-01-01 11:22:59.9989","12312020","31122020"), ("2020-01-01 11:22:59.9989","12312020","31122020" )], ["ID","Start_date","End_date"])

df2.withColumn('ss',f.date_format(df2.ID.cast(t.TimestampType()),'yyyy-MM-dd HH:mm:ss')).select('ss','ID').show(2, False)

+-------------------+------------------------+
|ss                 |ID                      |
+-------------------+------------------------+
|2020-01-01 11:22:59|2020-01-01 11:22:59.9989|
|2020-01-01 11:22:59|2020-01-01 11:22:59.9989|
+-------------------+------------------------+

Так что измените ваш

df = df.withColumn(row[0], f.to_timestamp(row[0], 'yyyy-mm-dd hh:mm:ss'))

с

df = df.withColumn(row[0], f.date_format(row[0], 'yyyy-MM-dd HH:mm:ss'))

, поскольку ваш столбец уже имеет тип timestamp.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...