UDF Pyspark не работает, ожидая, что строка не столбец - PullRequest
0 голосов
/ 30 января 2019

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

Однако, когда я запускаю задание spark, моя функция выбрасываетследующая ошибка:

strptime() argument 1 must be string, not Column
Here is my UDF and python function

dateformat = udf(lambda x: datetimeformat(x), StringType())

def datetimeformat(x):
   return datetime.strptime(x, '%Y%m%d %H:%M:%S.%f').strftime('%Y-%m-%d %H:%M:%S.%f')

How the udf is called

newdf=newdf.withColumn("date",dateformat(newdf["date"]))



Ответы [ 2 ]

0 голосов
/ 31 января 2019

Нет доступа к вашему newdf.Я создал временный набор данных, подобный следующему

c: \ tmp \ f4.csv


dt
20180212 15:10:10.000
20180212 15:10:10.000
20180212 15:10:10.000

Код следующий:

from pyspark.sql.functions import *
from pyspark.sql.types import *
from datetime import datetime
schema=StructType([StructField("dt",StringType())])
f1=spark.read.format("csv").schema(schema).option("header","true").option("delimiter","|").load("c:/tmp/f4.csv")
dateformat = udf(lambda x: datetimeformat(x), StringType())
def datetimeformat(x):
   return datetime.strptime(x, '%Y%m%d %H:%M:%S.%f').strftime('%Y-%m-%d %H:%M:%S.%f')



f2=f1.withColumn("date",dateformat(f1["dt"]))
f2.show()

Вывод

+--------------------+--------------------+
|                  dt|                date|
+--------------------+--------------------+
|20180212 15:10:10...|2018-02-12 15:10:...|
|20180212 15:10:10...|2018-02-12 15:10:...|
|20180212 15:10:10...|2018-02-12 15:10:...|
+--------------------+--------------------+

0 голосов
/ 31 января 2019

Я не могу проверить, поскольку у меня нет доступной среды зажигания, но я думаю, что вам просто нужно написать имя столбца вместо объекта столбца:

newdf=newdf.withColumn("date",dateformat("date"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...