Функция UDF возвращает словарь, но возвращаемой схемой является StructType - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующий тестовый фрагмент.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...