pyspark udf AttributeError:';非类型';对象没有属性';rfind';
尝试在pyspark udf AttributeError:';非类型';对象没有属性';rfind';,pyspark,Pyspark,尝试在列中使用simpleudf,我得到以下错误 实际上,订单号是一种字符串类型,它的值如下所示,并且没有空值 1234.345.344343434 代码: order_udf = udf(lambda x: x[x.rfind(".") + 1:], StringType()) df.withColumn("order_number", order_udf('order_number')).show() 我需要更改udf调用中的某些内容吗?您可以不使用udf:(使用split和elemen
列中使用simpleudf
,我得到以下错误
实际上,订单号是一种字符串类型,它的值如下所示,并且没有空值
1234.345.344343434
代码:
order_udf = udf(lambda x: x[x.rfind(".") + 1:], StringType())
df.withColumn("order_number", order_udf('order_number')).show()
我需要更改udf调用中的某些内容吗?您可以不使用udf:(使用split和element_at)
您可以不使用udf:(使用split和element_at)
我们可以拆分
上的订单号
,然后获取数组的最后一个元素(或者)我们可以使用regexp\u extract
函数仅从最后一个
中获取订单号
示例:
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 |
#+------------+
我们可以拆分
上的订单号
,然后获取数组的最后一个元素(或者)我们可以使用regexp\u extract
函数仅从最后一个
中获取订单号
示例:
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 |
#+------------+
我能够执行上面的代码,并得到订单号为34434
。我在本地执行时也得到了这个,但在集群中它不起作用。。我希望这与数据类型没有正确通过有关Lyok。。使用udf
而不是常规spark函数背后是否有具体原因?像regexp_replace(或)split吗?@Shu:不,我想用这个很简单?我们可以用regexp\u替换吗?基本上,我需要得到订单号的最后一部分。我能够执行上面的代码,并以3443434
的形式得到订单号。我在本地执行时也得到了这一点,但在集群中它不起作用。。我希望这与数据类型没有正确通过有关Lyok。。使用udf
而不是常规spark函数背后是否有具体原因?像regexp_replace(或)split吗?@Shu:不,我想用这个很简单?我们可以用regexp\u替换吗?基本上,我需要得到订单号的最后一部分。为什么我们需要使用元素?为什么我们不能使用split(col(“o”),“\”)[2]
@Shankar,如果您的数据中总是有两个“.”,那么就可以使用了。。为了使它更具动态性,我们使用-1,那么我们将始终从数组中获取最后一个元素!为什么我们需要使用element_at,为什么我们不能只使用split(col(“o”),“\”)[2]
@Shankar,如果您的数据中总是有两个“.”,那么就可以使用了。。为了使它更具动态性,我们使用-1,那么我们将始终从数组中获取最后一个元素!