如何在 PySpark 的 UDF 中返回“元组类型”?

2024-02-17

All the 中的数据类型pyspark.sql.types are https://spark.apache.org/docs/latest/api/python/_modules/pyspark/sql/types.html:

__all__ = [
    "DataType", "NullType", "StringType", "BinaryType", "BooleanType", "DateType",
    "TimestampType", "DecimalType", "DoubleType", "FloatType", "ByteType", "IntegerType",
    "LongType", "ShortType", "ArrayType", "MapType", "StructField", "StructType"]

我必须编写一个 UDF(在 pyspark 中),它返回一个元组数组。我该给它的第二个参数(即 udf 方法的返回类型)做什么?这将是类似的事情ArrayType(TupleType())...


不存在这样的事情TupleType在斯帕克.产品类型表示为structs具有特定类型的字段。例如,如果您想返回一个数组(整数、字符串),您可以使用如下模式:

from pyspark.sql.types import *

schema = ArrayType(StructType([
    StructField("char", StringType(), False),
    StructField("count", IntegerType(), False)
]))

用法示例:

from pyspark.sql.functions import udf
from collections import Counter

char_count_udf = udf(
    lambda s: Counter(s).most_common(),
    schema
)

df = sc.parallelize([(1, "foo"), (2, "bar")]).toDF(["id", "value"])

df.select("*", char_count_udf(df["value"])).show(2, False)

## +---+-----+-------------------------+
## |id |value|PythonUDF#<lambda>(value)|
## +---+-----+-------------------------+
## |1  |foo  |[[o,2], [f,1]]           |
## |2  |bar  |[[r,1], [a,1], [b,1]]    |
## +---+-----+-------------------------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PySpark 的 UDF 中返回“元组类型”? 的相关文章

随机推荐