控制Apache Spark中的数据分区



数据看起来像:

1、2、3、4
行1行1行1行1
第2行第2行第2行
第3行第3行第3行
第4行第4行第4行第4行
第5行第5行第5行第5行
第6行第6行第6行第6行

问题:我想分区这个数据,让我们说第1行和第2行将被处理为一个分区,第3行和第4行作为另一个,第5行和第6行作为另一个,并创建一个JSON数据合并它们与列(列头与数据值在行的)。

输出应该像:
[col2
{col1:第一行:第一行:col3:第一行:col4:第一行},
{col1: row2 col2: row2: col3: row2: col4: row2},
{col1: row3 col2: row3: col3: row3: col4: row3},
{col1: row4 col2: row4: col3: row4: col4: row4},…


)

我尝试使用spark中可用的修复(num),但它不完全像我想要的那样分区。因此生成的JSON数据是无效的。我有问题,为什么我的程序需要同样的时间来处理数据,即使我使用了不同数量的内核,可以在这里找到,重新分区的建议是由@Patrick McGloin提出的。在那个问题中提到的代码是我正在尝试做的事情。

猜你需要的是partitionBy。在Scala中,你可以为它提供一个自定义构建hashpartitioner,而在Python中,你可以传递partitionFunc。Scala中有很多例子,所以让我简要地解释一下Python的风格。

partitionFunc期望一个元组,第一个元素是键。假设你以下列方式整理你的资料:(ROW_ID (A, B, C . .)) ROW_ID =[1、2、3、…、k)。您可以添加ROW_ID,然后删除它。

每两行创建一个新分区:

rdd.partitionBy(numPartitions = int(rdd.count() / 2),
                partitionFunc = lambda key: int(key / 2)

partitionFunc将生成一个序列0,0,1,1,2,2,…

最新更新