Чтобы использовать Pandas в Spark, у вас есть 2 варианта: -
Использование замыканий
Одна из самых сложных вещей в Spark - это понимание области действия и жизненного цикла переменных и методов при выполнении кода черезкластер. Операции RDD, которые изменяют переменные вне их области действия, могут быть частым источником путаницы. В приведенном ниже примере мы рассмотрим код, который использует foreach () для увеличения счетчика, но аналогичные проблемы могут возникнуть и для других операций.
Более подробную информацию можно найти здесь [1]
Пример
import numpy as np
from pyspark.sql.types import FloatType
import pyspark.sql.functions as F
spk_df = sqlContext.createDataFrame([[0,1,0,0],[1,1,0,0],[0,0,1,0],[1,0,1,1],[1,1,0,0]], ['t1', 't2', 't3', 't4'])
spk_df.show()
B = [2,0,1,0]
V = [5,1,2,4]
def V_sum(row,b,c):
return float(np.sum(c[row==b]))
v_sum_udf = F.udf(lambda row: V_sum(row, B, V), FloatType())
spk_df.withColumn("results", v_sum_udf(F.array(*(F.col(x) for x in spk_df.columns))))
Подробную информацию можно найти здесь [2]
Использование Pandas UDF
В Spark 2.4.4 имеется стандартная возможность использовать Pandasс искрой. Подробности можно найти здесь вместе с примерами [3]
1 - http://spark.apache.org/docs/latest/rdd-programming-guide.html#understanding-closures- 2 - Пользовательская функция через фрейм данных pyspark 3 - https://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html