我在一个类中创建一个火花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/

10-09 18:51