UDF函数返回字典,但返回模式为StructType

时间:2018-12-12 17:00:23

标签: python pyspark

我有以下测试代码段。

import pyspark
from pyspark.conf import SparkConf
from pyspark.sql import SQLContext
from pyspark.sql.functions import udf
from pyspark.sql.types import *


conf = SparkConf()
sc = pyspark.SparkContext(conf=conf)
spark = SQLContext(sc)

schema = StructType([
    StructField("foo", FloatType(), False),
    StructField("bar", FloatType(), False)
])

def udf_test(n):
    return {
        'foo': n / 2, 
        'bar': n * 2,
    }

test_udf = udf(udf_test, schema)
df = spark.createDataFrame([(1, 2.0), (2, 3.0)], ["x", "y"])

base_columns = df.columns

df.withColumn('foobar', test_udf("y")).select(*base_columns, 'foobar.*').show()

据我了解,我的UDF应该只返回值列表。 但是我试图返回字典,但它确实有效。它可以正常工作吗?

我怀疑它是否会获得字典,将其值转换为列表,然后再将其解包。但是,当您获得dict的值时,它可以以不同的顺序返回,因此此脚本可能无法正常工作。 我说的对吗?

0 个答案:

没有答案
相关问题