【发布时间】:2021-05-16 08:30:43
【问题描述】:
我正在尝试使用pandas_udf,因为我的数据位于 PySpark 数据框中,但我想使用 pandas 库。我有很多行,所以我无法将 PySpark 数据帧转换为 Pandas 数据帧。
我使用 textdistance (pip3 install textdistance)
并导入它:import textdistance。
test = spark.createDataFrame(
[('dog cat', 'dog cat'),
('cup dad', 'mug'),],
['value1', 'value2']
)
@pandas_udf('float', PandasUDFType.SCALAR)
def textdistance_jaro_winkler(a, b):
return textdistance.jaro_winkler(a, b)
test = test.withColumn('jaro_winkler', textdistance_jaro_winkler(col('value1'), col('value2')))
test.show()
我收到以下错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我试图将整个数据帧作为参数传递给函数,并在函数中传递字符串值,但我相信这会让事情变得更糟:
schema = StructType([StructField("value1", StringType(), True)
,StructField("value2", StringType(), True)
,StructField("jaro_winkler", FloatType(), True)
])
@pandas_udf(schema, PandasUDFType.GROUPED_MAP)
def textdistance_jaro_winkler(df):
df['jaro_winkler'] = df.apply(lambda x: textdistance.jaro_winkler(x['value1'], x['value2']))
return df
【问题讨论】:
-
如果您使用
udf会怎样?和@udf(DoubleType())一样,行吗?
标签: pandas dataframe apache-spark pyspark user-defined-functions