Объединить строку данных и строку времени - PullRequest
0 голосов
/ 11 декабря 2018

Как бы вы это сделали?Блоки данных 4.1, Spark 2.3

Вам предоставлен двухколонный кадр данных: 1) 'dt', строка, как показано.2) Строка 'tm', как показано.Я добавил третий столбец для этого поста.

Ваша задача - создать столбец 3, 'dttm', отметка времени, форматирование., Ведущие нули, точность и часовые пояса не так важны, как правильное объединение идентификаторов.'dt' & 'tm'.

Я использовал PySpark в этом посте, но я не женат на нем.

df1 = sqlContext.createDataFrame(
  [
     ('2018-06-02T00:00:00','12:30:00 AM', '06-02-2018 00:30:00.000+0000')
    ,('2018-11-15T00:00:00','03:00:00 AM', '11-15-2018 03:00:00.000+0000')
    ,('2018-06-02T00:00:00','10:30:00 AM', '06-02-2018 10:30:00.000+0000')
    ,('2018-06-02T00:00:00','12:30:00 PM', '06-02-2018 12:30:00.000+0000')
    ,('2018-11-15T00:00:00','03:00:00 PM', '11-15-2018 15:00:00.000+0000')
    ,('2018-06-02T00:00:00','10:30:00 PM', '06-02-2018 22:30:00.000+0000')
  ]
  ,['dt', 'tm', 'desiredCalculatedResult']
)

Я прошел десятки и десятки идесятки примеров и попыток, и пока я не нахожу это окончательное работоспособное решение.

Ответы [ 2 ]

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

Вы можете разделить вашу строку даты в «T», чтобы извлечь только часть даты, а затем вы можете объединить ее со строкой времени, чтобы получить строку, которая представляет фактическую временную метку, которую вы хотите создать.Тогда нужно просто преобразовать его в правильный формат.

from pyspark.sql.functions import concat, split, lit, from_unixtime, unix_timestamp

dt_tm = concat(split(df1.dt, "T")[0], lit(" "), df1.tm)
df1 = df1.withColumn("dttm", from_unixtime(unix_timestamp(dt_tm, 'yyyy-MM-dd hh:mm:ss a')).cast("timestamp")) 
0 голосов
/ 12 декабря 2018

пожалуйста, взгляните на встроенные функции

Вы хотите посмотреть:

date_format
to_timestamp
unix_timestamp
from_utc_timestamp

Комбинация этих или других функций DateTime выполниттвоя цельSpark 2.x имеет надежную поддержку для манипуляции с датами и временем, однако, если вы действительно не можете выполнить это с помощью встроенных функций, вы всегда можете вернуться к Java-пакету Joda Time.

...