PySpark - преобразование часовых и минутных данных в секунды - PullRequest
0 голосов
/ 03 марта 2020

У меня есть заданное время XXh: YYm (например, 1h: 23m), которое я пытаюсь преобразовать в секунды. Сложность состоит в том, что если оно меньше часа, то время будет дано как YYm (например, 52m).

В настоящее время я использую

%pyspark
newColumn = unix_timestamp(col("time"), "H:mm")

dataF.withColumn('time', regexp_replace('time', 'h|m', '')).withColumn("time", newColumn).show()

. Это прекрасно работает для удаления букв h и m и последующего преобразования в секунды, но выдает ноль, когда время меньше часа, как описано выше. так как это на самом деле не в формате H: мм. Какой хороший подход к этому? Я продолжаю пробовать разные вещи, которые, кажется, слишком усложняют, и я до сих пор не нашел решения.

Я склоняюсь к условному виду, подобному

if value contains 'h:' then newColumn = unix_timestamp(col("time"), "H:mm")
else  newColumn = unix_timestamp(col("time"), "mm")

, но я довольно новичок в pyspark и не уверен, как это сделать, чтобы получить окончательный результат. Я в основном ищу подход, который преобразует время в секунды и может обрабатывать форматы «1h: 23m», а также «53m».

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Это должно сработать, предполагая, что столбец времени имеет тип строки. Просто используется, когда в противном случае разделить два разных времени (по содержит «h») и используется подстрока для получения желаемых минут.

from pyspark.sql import functions as F
df.withColumn("seconds", F.when(F.col("time").contains("h"), F.unix_timestamp(F.regexp_replace("time", "h|m", ''),"H:mm"))\
.otherwise(F.unix_timestamp(F.substring("time",1,2),"mm")))\
.show()

+------+-------+
|  time|seconds|
+------+-------+
|1h:23m|   4980|
|   23m|   1380|
+------+-------+
0 голосов
/ 04 марта 2020

Вы можете использовать функцию " unix_timestamp " для преобразования DateTime в unix отметку времени в секундах.

Вы можете обратиться к одному из моих блогов по функции Spark DateTime и go в раздел " unix_timestamp ".

https://medium.com/expedia-group-tech/deep-dive-into-apache-spark-datetime-functions-b66de737950a

С уважением,

Neeraj

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