from pyspark.sql.types import ArrayType
def square_list(x):
return [float(val)**2 for val in x]
square_list_udf = udf(lambda y: square_list(y), ArrayType(FloatType()))
df.select('integer_arrays', square_list_udf('integer_arrays')).show()
PySpark中的UDFs函数
https://www.pianshen.com/article/7048214738/
解决dataframe数据量太少而导致集训运行时间过慢的问题,由于dataframe太小,spark会将整个dataframe分配到同一个executor,而其他的executor会闲置等待,也就是说spark并没有将python function并行化运算。
为了解决这个问题,我们可以在调用UDF函数之前将dataframe重分片。
df_repartitioned = df.repartition(100)
当我们提交一个作业时,要确保分片的数量要要多余executor的个数。