我编写了一个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"]))
答案 0 :(得分:0)
我无法测试,因为我没有可用的Spark环境,但是我认为您只需要写列名而不是列对象即可
newdf=newdf.withColumn("date",dateformat("date"))
答案 1 :(得分:0)
没有对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:...|
+--------------------+--------------------+