【问题标题】:PySpark error: TypeError: Invalid argument, not a string or columnPySpark 错误:TypeError:无效参数,不是字符串或列
【发布时间】:2021-07-01 20:20:32
【问题描述】:

我正在尝试从 Spark 数据框中的列中计算所有两个可能的单词对之间的相似度。我创建了一个 UDF 以及一个数据框来测试该函数,我将它们定义如下:

   #Similarity Function
def lcs_similarityy(vector):
  metric_lcs = MetricLCS()
  p = []
  for i in vector:
    for j in vector:
      p.append(1 - metric_lcs.distance(i, j))
  return  p
   
   #UDF
lcs_similarityyUDF = udf(lambda z: lcs_similarityy(z))

   #Spark Data Frame
df = spark.createDataFrame(["GERMAN", "GERMANIA", "GERMANY", "LENOVO"], "string").toDF("Name")

我期待一列有 16 行,因为有 16 个可能的对。但是,一旦我测试了功能

lcs_similarityUDF(df.select("Name"))

我收到错误:


TypeError: Invalid argument, not a string or column: DataFrame[Name: string] of type <class 'pyspark.sql.dataframe.DataFrame'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

我一直在尝试通过不同的方法来解决这个问题,但我无法让它发挥作用,而且我对 Spark 知之甚少,这可能是什么问题。我不知道我是否在 UDF 中犯了错误或定义了数据框,非常感谢任何帮助。

【问题讨论】:

    标签: apache-spark pyspark user-defined-functions


    【解决方案1】:

    如下应用你的UDF

    df.select(
        lcs_similarityUDF(df.Name).alias("Name")
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2020-05-05
      • 2019-11-04
      • 1970-01-01
      相关资源
      最近更新 更多