Как преобразовать строку в тип данных времени в pyspark или scala? - PullRequest
0 голосов
/ 07 января 2020

Обратите внимание, что я не запрашиваю unix_timestamp или timestamp или datetime тип данных, который запрашиваю time тип данных, возможно ли это в pyspark или scala?

Давайте рассмотрим подробнее, у меня есть такой кадр данных со столбцом Time тип строки

+--------+
|    Time|
+--------+
|10:41:35|
|12:41:35|
|01:41:35|
|13:00:35|
+--------+

Я хочу преобразовать его в тип данных time, потому что в моей базе данных SQL этот столбец равен time тип данных, поэтому я пытаюсь вставить свои данные с применением искрового соединителя Bulk Copy Так что для массового копирования моя схема данных и таблицы базы данных должны быть одинаковыми, поэтому мне нужно преобразовать мой столбец Time в time Тип данных.

Ценю Любое предложение или помощь. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 января 2020

Следующее было выполнено в оболочке PySpark, модуль datetime разрешает формат времени

>>> t = datetime.datetime.strptime('10:41:35', '%H:%M:%S').time()
>>> type(t)
<class 'datetime.time'>

Когда вышеуказанная функция применяется к кадру данных с использованием карты, она завершается неудачно, так как PySpark не ' время типа данных не может быть выведено.

>>> df2.select("val11").rdd.map(lambda x: datetime.datetime.strptime(str(x[0]), '%H:%M:%S').time()).toDF()

TypeError: Can not infer schema for type: <class 'datetime.time'>

Модуль pyspark.sql.types на данный момент поддерживает только следующие типы данных

NullType
StringType
BinaryType
BooleanType
DateType
TimestampType
DecimalType
DoubleType
FloatType
ByteType
IntegerType
LongType
ShortType
ArrayType
MapType
StructField
StructType
0 голосов
/ 07 января 2020

Попробуйте

df.withColumn('time', F.from_unixtime(F.unix_timestamp(F.col('time'), 'HH:mm:ss'), 'HH:mm:ss'))
...