如何在spark中为mapPartition指定分区

how to specify the partition for mapPartition in spark

我想做的是分别计算每个列表,例如,如果我有 5 个列表 ([1,2,3,4,5,6],[2,3,4,5,6],[3,4,5,6],[4,5,6],[5,6]),我想得到 5 个列表而不是 6 个,我会做类似的事情:

data=[1,2,3,4,5,6]+[2,3,4,5,6,7]+[3,4,5,6,7,8]+[4,5,6,7,8,9]+[5,6,7,8,9,10]

def function_1(iter_listoflist):
    final_iterator=[]
    for sublist in iter_listoflist:
        final_iterator.append([x for x in sublist if x!=6])
    return iter(final_iterator)  

sc.parallelize(data,5).glom().mapPartitions(function_1).collect()

然后剪掉列表,这样我又得到了第一个列表。 有没有办法简单地分离计算?我不希望列表混在一起,它们的大小可能不同。

谢谢

菲利普

据我了解您的意图,您在这里所需要的只是在 parallelize 您的数据时将各个列表分开:

data = [[1,2,3,4,5,6], [2,3,4,5,6,7], [3,4,5,6,7,8],
    [4,5,6,7,8,9], [5,6,7,8,9,10]]

rdd = sc.parallelize(data)

rdd.take(1) # A single element of a RDD is a whole list
## [[1, 2, 3, 4, 5, 6]]

现在您可以简单地map使用您选择的函数:

def drop_six(xs):
    return [x for x in xs if x != 6]

rdd.map(drop_six).take(3)
## [[1, 2, 3, 4, 5], [2, 3, 4, 5, 7], [3, 4, 5, 7, 8]]