Apache spark pyspark udf clean html标记获取类型错误
我是pyspark新手,在将python函数转换为pyspark udf时遇到困难 我有一个df如下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
+--------------------+
| 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)的结果吗?