我正在尝试对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
为什么会这样?
答案 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]])]