PythonSpark将列表拆分为子列表,再除以元素内的值之和

PythonSpark将列表拆分为子列表,再除以元素内的值之和,python,mapreduce,aggregate-functions,partitioning,apache-spark,Python,Mapreduce,Aggregate Functions,Partitioning,Apache Spark,我尝试根据对象中某个参数的累积值,将python中的对象列表拆分为子列表。让我用一个例子来说明: 我有这样一个对象列表: [{x:1, y:2}, {x:3, y:2}, ..., {x:5, y: 1}] [[{x:3, y:1}, {x:3, y:1}, {x:4, y:1}], [{x:2, y:1}, {x:2, y:1}, {x:6, y:1}]] 我想把这个列表分成几个子列表,其中子列表中x值的总和是相同的(或大致相同),因此结果可能如下所示: [{x:1, y:2}, {x:3

我尝试根据对象中某个参数的累积值,将python中的对象列表拆分为子列表。让我用一个例子来说明:

我有这样一个对象列表:

[{x:1, y:2}, {x:3, y:2}, ..., {x:5, y: 1}]
[[{x:3, y:1}, {x:3, y:1}, {x:4, y:1}], [{x:2, y:1}, {x:2, y:1}, {x:6, y:1}]]
我想把这个列表分成几个子列表,其中子列表中x值的总和是相同的(或大致相同),因此结果可能如下所示:

[{x:1, y:2}, {x:3, y:2}, ..., {x:5, y: 1}]
[[{x:3, y:1}, {x:3, y:1}, {x:4, y:1}], [{x:2, y:1}, {x:2, y:1}, {x:6, y:1}]]
其中x的和等于10。我正在处理的对象稍微复杂一点,我的x是浮点值。因此,我想聚合有序列表中的值,直到x的总和>=10,然后开始创建下一个子列表

在我的例子中,元素的第一个列表是一个有序列表,求和必须在有序列表上进行

我已经在C#中做了类似的事情,在C#中我迭代了所有元素,并保留一个值为“x”的计数器。我对连续对象的x值求和,直到它达到我的阈值,然后创建一个新的子列表,并重新启动计数器

现在我想在python中重新实现它,然后将其用于。因此,我正在寻找一个更“功能性”的实现,也许可以与MapReduce框架很好地配合使用。我想不出除了迭代法以外的其他方法


如果您有任何建议或可能的解决方案,我将欢迎所有建设性意见。

您需要在拆分过程中保留订单吗?在研究并行化这个算法时,我们需要一种划分数据的方法。在这种情况下,对源数据应用原始拆分可能会产生“剩余”,可能会将某些元素从其目标集中排除。@maasg我需要保留初始列表中的顺序,因为将连续样本中的值相加对我来说很重要。我的数据集是一组描述参数x随时间变化的样本。现在我想用大致相等的x值将样本分组,要做到这一点,我需要将它们加在一起,并保持它们的顺序不变,以保留有意义的数据。我在这里尝试了一个函数impl:但我没有找到一种方法来保持顺序。因此,该算法与迭代解一样是顺序的。甚至最糟糕的是,当试图避免保持可变状态时,这个解决方案是O(n^2),而一个简单的迭代器在元素上有一个累加器是O(n)。对于“sparky”解决方案,您需要一种对数据进行分区的方法,因此保持顺序可能是一项艰难的要求。如果
x
是增量值,是否可以使用绝对值?看看并行化,有没有办法将集合一分为二?(然后可能再过两次尝试树状结构)?也许我把问题弄混了一点。我想我不需要保留最终列表上的顺序。我只需要按顺序处理初始列表。因此,如果通过添加列表中的前10个元素可以找到所需的x值,这就是我需要的。