Список пропусков PySpark для пользовательской функции - PullRequest
0 голосов
/ 11 января 2020

У меня есть DataFrame с одним столбцом. В каждой строке этого столбца есть список с разным числом целых чисел. Например, в строке 1 есть список из 5 целых чисел. В строке 2 есть список из 8 целых чисел и ... Я хочу написать UDF, который получает каждую строку в виде списка, умножает все целые числа в списке и возвращает результат в виде числа. Я хочу, чтобы ответы были в другом столбце, поэтому это будет df.withColumn (...) . По какой-то причине я хочу использовать UDF , а НЕ любые другие предварительно созданные функции или команды. Спасибо за ваше время и поддержку.

1 Ответ

1 голос
/ 11 января 2020

Определение некоторых примеров входных данных:

df = spark.createDataFrame([
    (1, [3, 4, 8]), (2, [7, 2, 6, 8])
], ("id", "list_of_ints"))

df.show()

Определение udf:

from pyspark.sql.functions import udf, col
def product(numbers):
     a = 1
     for num in numbers:
         a *= num
     return a

from pyspark.sql.types import IntegerType
product_udf = udf(lambda z: product(z), IntegerType())

И добавление столбца с произведением всех элементов списка:

df.withColumn("product", product_udf("list_of_ints")).show()

+---+------------+-------+
| id|list_of_ints|product|
+---+------------+-------+
|  1|   [3, 4, 8]|     96|
|  2|[7, 2, 6, 8]|    672|
+---+------------+-------+

Надеюсь, это поможет!

...