在python pyspark中向列表添加元素

在python pyspark中向列表添加元素,python,list,pyspark,Python,List,Pyspark,我有一个包含学生数据结构的列表-['100','1班','110','2班','1030','2班',…]。我使用此命令获得的结构: student_class = student.map(lambda x:x).zip(class) 现在,我想将学生分数添加到上述列表的每个元素中,以便输出为: ['100','1班',得1分,'110','2班',得2分,'1030','2班',得3分,…] 学生分数显示在名为score的列表中。如何将分数添加到上面的student_class list中,

我有一个包含学生数据结构的列表-['100','1班','110','2班','1030','2班',…]。我使用此命令获得的结构:

student_class = student.map(lambda x:x).zip(class)
现在,我想将学生分数添加到上述列表的每个元素中,以便输出为:

['100','1班',得1分,'110','2班',得2分,'1030','2班',得3分,…]

学生分数显示在名为score的列表中。如何将分数添加到上面的student_class list中,以使其成为student_class score list?

由于您有一个元组列表,并且元组是不可变的,因此您需要通过将现有元组与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)]
另一种但不太像python的方式,但概念相同:

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)]
由于您有一个元组列表,并且元组是不可变的,因此需要通过将现有元组集中到由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)]
另一种但不太像python的方式,但概念相同:

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)]

因为您使用的是spark,所以也可以在spark中使用zip和map来附加分数

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()
输出:


我认为使用spark解决方案比使用纯python解决方案更合适,尤其是当数据较大时,这就是为什么要使用spark,对吗?

因为您使用spark,所以也可以在spark中使用zip和map来追加分数

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()
输出:


我认为使用spark解决方案比使用纯python解决方案更合适,尤其是当数据较大时,这就是为什么要使用spark,对吗?

当我尝试方法1时,我得到了TypeError:zip参数1必须支持迭代这意味着您调用zip时使用的参数不可iterable而不是列表,字典或元组等。。验证变量的类型。我的分数列表是通过使用scores=data.maplambda x:x.collect形成的。我已经解决了这个问题!我的student_类是一个RDD,所以我添加了。collect使其成为一个列表当我尝试方法1时,我得到了TypeError:zip参数1必须支持迭代。这意味着您调用zip时使用的参数不可编辑,而不是列表、字典或元组等。。验证变量的类型。我的分数列表是通过使用scores=data.maplambda x:x.collect形成的。我已经解决了这个问题!我的student_类是RDD,所以我添加了。collect使其成为一个列表为什么不在spark中使用zip和map来追加分数?为什么不在spark中使用zip和map来追加分数?