Apache spark pyspark udf clean html标记获取类型错误

Apache spark pyspark udf clean html标记获取类型错误,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我是pyspark新手,在将python函数转换为pyspark udf时遇到困难 我有一个df如下 +--------------------+ | summary| +--------------------+ |<p>test test </p> | |<a>test test </a> | |<p>test test </p> | +--------------------+ i

我是pyspark新手,在将python函数转换为pyspark udf时遇到困难

我有一个df如下

+--------------------+
|             summary|
+--------------------+
|<p>test test </p>   |
|<a>test test </a>   |
|<p>test test </p>   |
+--------------------+
import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html(df.summary))
但运行时出现以下错误:
TypeError:参数无效,不是字符串或列


正确的方法是什么

您以错误的方式将列传递给UDF! 试试这个:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html("summary"))
重新导入
clean_html=udf(lambda raw:re.sub(re.compile(“”),“”,raw))
df.withColumn('clean',clean_html(“摘要”))
或者这个:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html(col("summary")))
重新导入
clean_html=udf(lambda raw:re.sub(re.compile(“”),“”,raw))
df.withColumn('clean',clean_html(col(“summary”))
结果是:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+
+-----------------+----------+
|总结|清洁|
+-----------------+----------+
| 测试测试

|测试测试| |测试|测试| +-----------------+----------+
您以错误的方式将列传递给UDF! 试试这个:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html("summary"))
重新导入
clean_html=udf(lambda raw:re.sub(re.compile(“”),“”,raw))
df.withColumn('clean',clean_html(“摘要”))
或者这个:

import re
clean_html = udf(lambda raw: re.sub(re.compile('<.*?>'), '', raw))
df.withColumn('clean', clean_html(col("summary")))
重新导入
clean_html=udf(lambda raw:re.sub(re.compile(“”),“”,raw))
df.withColumn('clean',clean_html(col(“summary”))
结果是:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+
+-----------------+----------+
|总结|清洁|
+-----------------+----------+
| 测试测试

|测试测试| |测试|测试| +-----------------+----------+
您可以避免使用udf函数,直接使用
regexp\u replace

#第一次导入regexp\u替换
从pyspark.sql.functions导入regexp\u replace
#创建数据帧
# [...]
#传递列、正则表达式和替换值
df=df.withColumn('clean',regexp_replace(df.summary,r'','')
df.show()
输出:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+
+-----------------+----------+
|总结|清洁|
+-----------------+----------+
| 测试测试

|测试测试|
|

您可以避免使用udf函数,直接使用
regexp\u replace

#第一次导入regexp\u替换
从pyspark.sql.functions导入regexp\u replace
#创建数据帧
# [...]
#传递列、正则表达式和替换值
df=df.withColumn('clean',regexp_replace(df.summary,r'','')
df.show()
输出:

+-----------------+----------+
|          summary|     clean|
+-----------------+----------+
|<p>test test </p>|test test |
|<a>test test </a>|test test |
+-----------------+----------+
+-----------------+----------+
|总结|清洁|
+-----------------+----------+
| 测试测试

|测试测试|
|

你能给出打印(df.schema)的结果吗?
你能给出打印(df.schema)的结果吗?