如何从熊猫UDF返回StructType?

时间:2019-12-17 18:08:36

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

我正在使用newspaper3k处理html转储,并提取元关键字和元描述。 我编写了一个udf函数。该函数接受两个列值:urlhtml,并返回带有meta数组和keywords字符串的description StructType。

如何将其重写为pandas_udf? Afaiu pandas_udf将收到两列,分别为pd.Series。根据{{​​3}},该函数还必须返回pd.Series

  1. 系列中合适的数据类型是什么? 可以使用pyspark.sql.Row吗?

  2. 如何声明函数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))

0 个答案:

没有答案