我在一个类中创建一个火花UDF。当我执行以下代码时,我得到了异常。
class A(B):
def __init__(self,spark):
B.__init__(self)
self.spark = spark
def process(self, df):
df = df.withColumn("col_sub_entry", self.conditions_title("entry_title"))
def conditions_entry_title(self,x:StringType()):
if len(x.split(" ") < 3):
return 0
else :
return x
conditions_title = udf(conditions_entry_title, IntegerType())
最佳答案
使用API函数可以执行相同操作时,应始终avoid using udfs。
这就是我要做的:
from pyspark.sql.functions import when, col, size, split
class A:
def __init__(self, spark):
# B.__init__(self)
self.spark = spark
def process(self, df):
df = df.withColumn("col_sub_entry", A.conditions_title("entry_title"))
return df
@staticmethod
def conditions_title(someColumn):
return when(size(split(col(someColumn), "\s")) < 3, 0).otherwise(1)
甚至:
@staticmethod
def conditions_title(someColumn):
return (size(split(col(someColumn), "\s")) >= 3).cast("int")
关于python - TypeError:无效的参数,而不是字符串或列:pyspark UDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52822940/