我有以下测试代码段。
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的值时,它可以以不同的顺序返回,因此此脚本可能无法正常工作。 我说的对吗?