在Pyspark UDF的return语句中进行func调用时,未返回任何输出

时间:2018-06-22 09:25:04

标签: python pyspark user-defined-functions pyspark-sql

我正在尝试对Pyspark ArrayType中的DataFrame列进行排序。 以下是未提供任何输出的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

为什么会这样?

1 个答案:

答案 0 :(得分:0)

请更改函数中的索引,

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]])]
相关问题