将元素添加到python pyspark中的列表列表中

时间:2015-08-14 15:09:13

标签: python list pyspark

我有一份包含结构学生数据的列表列表 - [('100', 'class 1'), ('110', 'class 2'), ('1030', 'class 2'),.....]。我从使用此命令获得的结构:

student_class = student.map(lambda x:x).zip(class)

现在我想将学生分数添加到上面列表列表的每个元素中,以便输出变为:

[('100', 'class 1',score1), ('110', 'class 2',score2), ('1030', 'class 2',score3),.....]

学生分数出现在名为score的列表中。如何将分数添加到上述student_class列表中,以使其成为student_classScore列表?

2 个答案:

答案 0 :(得分:4)

由于tuple tuple(score,)是不可变的,因此您需要通过使用单元素元组集中现有元组来创建新元组(已创建)通过l = [('100', 'class 1'), ('110', 'class 2'), ('1030', 'class 2')] scores = [1, 2, 3] new_list = [] for tup, score in zip(l, scores): new_list.append(tup + (score,)) print new_list >> [('100', 'class 1', 1), ('110', 'class 2', 2), ('1030', 'class 2', 3)] ),然后将新创建的元组附加到新列表。

for index, tup in enumerate(l):
    l[index] = tup + (scores[index],)
print l
>> [('100', 'class 1', 1), ('110', 'class 2', 2), ('1030', 'class 2', 3)]

另一种但不知何故不那么pythonic的方式,但相同的概念:

messages: {
        required: "Veuillez saisir un numéro de téléphone",
        digits:"Veuillez saisir des chiffres"
        }

答案 1 :(得分:1)

由于您使用了spark,因此您可以在spark中使用zipmap来附加分数。

student_RDD = sc.parallelize(['100', '110', '1030'])
class_RDD = sc.parallelize(['class1', 'class2', 'class2'])
score_RDD = sc.parallelize([1, 2, 3])

student_class_RDD = student_RDD.zip(class_RDD) # There is no need to map first
student_class_RDD.zip(score_RDD).map(lambda x: x[0] + (x[1],)).collect()

输出:

[('100', 'class1', 1), ('110', 'class2', 2), ('1030', 'class2', 3)]

我认为使用spark解决方案更合适,而不是纯python解决方案,特别是当数据很大时,这就是你使用spark的原因吧?