当 func 调用 Pyspark UDF 的返回语句时,没有返回输出



我正在尝试对 PysparkDataFrame中的ArrayType列进行排序。 以下是未给出任何输出的 pyspark 代码:

from operator import itemgetter
from pyspark.sql.functions import *
from pyspark.sql.types import *
def sort_data_array(row):
return sorted(row, key=itemgetter(1))
# sorting the ArrayType cols according to ascending order of 1st index elems of inner lists
df1 = spark.createDataFrame([[1,[[3,2,3], [1,5,4], [5,6,6]]], [2,[[12,3,6], [9,5,1], [5,3,1]]]], StructType([StructField('_1', IntegerType()), StructField('_2', ArrayType(ArrayType(IntegerType())))]))
sorting_udf = udf(sort_data_array, ArrayType(ArrayType(IntegerType())))
df1 = df1.withColumn('sorted_2', sorting_udf(df1['_2']))
df1.take(2)

当我进行此更改时,此代码将运行并提供所需的输出:

def sort_data_array(row):
sorted_row = sorted(row, key=itemgetter(1))
return sorted_row

为什么会这样?

请更改函数中的索引,

def sort_data_array(row):
return sorted(row, key=itemgetter(0)) # 0 index

现在输出是:

[Row(_1=1, _2=[[3, 2, 3], [1, 5, 4], [5, 6, 6]], sorted_2=[[1, 5, 4], [3, 2, 3], [5, 6, 6]]), 
Row(_1=2, _2=[[12, 3, 6], [9, 5, 1], [5, 3, 1]], sorted_2=[[5, 3, 1], [9, 5, 1], [12, 3, 6]])]

最新更新