PySpark: добавление метки времени к столбцу даты и переформатирование всего столбца в тип метки времени - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующий пример фрейма данных ниже в PySpark.В настоящее время столбец является типом данных Date.

scheduled_date_plus_one
12/2/2018
12/7/2018

Я хочу переформатировать дату и добавить к ней метку времени в 2 часа ночи на основе 24-часовых часов.Ниже выводится желаемый столбец фрейма данных:

scheduled_date_plus_one
2018-12-02T02:00:00Z
2018-12-07T02:00:00Z

Как мне добиться вышеупомянутого?Я знаю, как это сделать в Python Pandas, но незнаком с PySpark.

Я знаю, что мой желаемый столбец будет представлять собой строковый тип данных, потому что у меня есть 'T' и 'Z' в моих значениях.Это нормально ... Я думаю, что я уже знаю, как преобразовать строковый тип данных в метку времени, так что все готово.

1 Ответ

0 голосов
/ 14 декабря 2018

Давайте создадим это PySpark DataFrame для вас.Вы должны импортировать to_date из functions модуля -

Шаг 0: Импортировать эти 4 функции -

from pyspark.sql.functions import to_date, date_format, concat, lit

Шаг 1:

from pyspark.sql.functions import to_date, date_format, concat, lit
values = [('12/2/2018',),('12/7/2018',)]
df = sqlContext.createDataFrame(values,['scheduled_date_plus_one'])
df = df.withColumn('scheduled_date_plus_one',to_date('scheduled_date_plus_one','MM/dd/yyyy'))
df.printSchema()

root
 |-- scheduled_date_plus_one: date (nullable = true)

df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|             2018-12-02|
|             2018-12-07|
+-----------------------+

Как мы видим в .printSchema(), у нас есть дата в формате date.Итак, в качестве первого шага мы создали необходимый DataFrame.

Шаг 2: Преобразование scheduled_date_plus_one из формата date в формат string, чтобы мы моглиприсоединить T02:00:00Z к нему.date_format преобразует дату в строку в нужном формате.Мы взяли yyyy-MM-dd.

df = df.withColumn('scheduled_date_plus_one',date_format('scheduled_date_plus_one',"yyyy-MM-dd"))
df.printSchema()
root
 |-- scheduled_date_plus_one: string (nullable = true)

df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|             2018-12-02|
|             2018-12-07|
+-----------------------+

.printSchema() выше, показывает, что scheduled_date_plus_one преобразуется в формат string, и теперь мы можем выполнить часть concatenation.

Шаг 3: Конкатенация - для этого мы используем функцию concat.Примечание: вы должны замаскировать T02:00:00Z в функции lit(), так как мы не объединяем два столбца.

df = df.withColumn('scheduled_date_plus_one',concat('scheduled_date_plus_one',lit('T02:00:00Z')))
df.show()
+-----------------------+
|scheduled_date_plus_one|
+-----------------------+
|   2018-12-02T02:00:00Z|
|   2018-12-07T02:00:00Z|
+-----------------------+
...