Sorting PySpark-按第二列对RDD排序

Sorting PySpark-按第二列对RDD排序,sorting,apache-spark,pyspark,rdd,Sorting,Apache Spark,Pyspark,Rdd,我有这个RDD: [[u''], [u'E01', u'Lokesh'], [u'E10', u'Venkat'], [u'EO2', u'Bhupesh'], [u'EO3', u'Amit'], [u'EO4', u'Ratan'], [u'EO5', u'Dinesh'], [u'EO6', u'Pavan'], [u'EO7', u'Tejas'], [u'EO8', u'Sheela']] 我想按第二列(名称)排序。我尝试了这一点,但没有成功: [u'EO3', u'Amit'],

我有这个RDD:

[[u''], [u'E01', u'Lokesh'], [u'E10', u'Venkat'], [u'EO2', u'Bhupesh'], [u'EO3', u'Amit'], [u'EO4', u'Ratan'], [u'EO5', u'Dinesh'], [u'EO6', u'Pavan'], [u'EO7', u'Tejas'], [u'EO8', u'Sheela']]
我想按第二列(名称)排序。我尝试了这一点,但没有成功:

[u'EO3', u'Amit'], 
[u'EO2', u'Bhupesh'], 
[u'EO5', u'Dinesh'], 
[u'E01', u'Lokesh'], 
[u'EO6', u'Pavan'],
[u'EO8', u'Sheela'],
[u'EO7', u'Tejas'],
[u'E10', u'Venkat']
我试着这样做:

sorted = employee_rows.sortBy(lambda line: line[1])
但它给了我这个:

IndexError: list index out of range
怎样才能通过第二列排序


谢谢

一般来说,您应该使所有高阶rdd函数对不良输入具有鲁棒性。在这种情况下,您的错误是因为您至少有一条记录没有第二列

一种方法是对
lambda
行的长度进行条件检查:

employee_rows.sortBy(lambda行:如果len(line)>1,则行[1])。collect()
#[[u''],
#[u'EO3',u'Amit'],
#[u'EO2',u'Bhupesh'],
#[u'EO5',u'Dinesh'],
#[u'E01',u'Lokesh'],
#[u'EO6',u'Pavan'],
#[u'EO4',u'Ratan'],
#[u'EO8',u'Sheela'],
#[u'EO7',u'Tejas'],
#[u'E10',u'Venkat']]
也可以使用
try/except
定义自定义排序函数。有一种方法可以使“坏”行最后排序:

def mysort(行):
尝试:
返回线[1]
除:
#因为你是按字母顺序排序的
返回“Z”
employee_rows.sortBy(mysort.collect)()
#[u'EO3',u'Amit'],
#[u'EO2',u'Bhupesh'],
#[u'EO5',u'Dinesh'],
#[u'E01',u'Lokesh'],
#[u'EO6',u'Pavan'],
#[u'EO4',u'Ratan'],
#[u'EO8',u'Sheela'],
#[u'EO7',u'Tejas'],
#[u'E10',u'Venkat'],
#[u']]