У меня есть следующий тестовый фрагмент.
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, он может возвращаться в другом порядке, поэтому этот скрипт может работать некорректно.Я прав?