我正在使用newspaper3k
处理html转储,并提取元关键字和元描述。
我编写了一个udf函数。该函数接受两个列值:url
和html
,并返回带有meta
数组和keywords
字符串的description
StructType。
如何将其重写为pandas_udf? Afaiu pandas_udf将收到两列,分别为pd.Series
。根据{{3}},该函数还必须返回pd.Series
系列中合适的数据类型是什么?
可以使用pyspark.sql.Row
吗?
如何声明函数returnType
?
这是裸露的火花udf:
import pyspark.sql.types as T
import pyspark.sql.functions as F
from pyspark.sql import Row
import re
from newspaper import Article
def _extract_meta(url, html):
res = Row(keywords=[], description='')
try:
art = Article(url)
art.set_html(html)
art.parse()
res = Row(keywords=art.meta_keywords, description=art.meta_description)
except:
pass
return res
extract_meta = F.udf(_extract_meta, T.StructType().add('keywords', T.ArrayType(T.StringType())).add('description', T.StringType()))
df = df.withColumn('meta', extract_meta(df.url, df.html))