尝试在udf
内使用简单的withColumn
,出现以下错误。
实际上,订单号是字符串类型,其值如下所示,并且没有空值。
1234.345.344343434
代码:
order_udf = udf(lambda x: x[x.rfind(".") + 1:], StringType())
df.withColumn("order_number", order_udf('order_number')).show()
我需要在udf通话中更改某些内容吗?
答案 0 :(得分:2)
您可以不使用udf :(使用split和element_at)
extShutdownHook
答案 1 :(得分:2)
我们可以 split
上.
上的订单号,然后获取last element of array
(或者)我们可以使用 regexp_extract
函数仅从最后一个.
中获取order_number。
Example:
from pyspark.sql.functions import *
df1=sc.parallelize([('1234.345.344343434',)]).toDF(["o"])
df1.withColumn("arr", split(col("o"),'\.')).selectExpr("arr[size(arr)-1] as order_number").show(10,False)
#starting from spark2.4+ we can use element_at function
df1.withColumn("arr", element_at(split(col("o"),'\.'),-1)).show(10,False)
#using regexp_extract function
df1.withColumn("order_number",regexp_extract(col('o'),'(?=[^.]+$)(.*)',1)).show()
#+------------+
#|order_number|
#+------------+
#|344343434 |
#+------------+