我的数据集如下所示:
+---+
|col|
+---+
| a|
| b|
| c|
| d|
| e|
| f|
| g|
+---+
我想重新格式化此数据集,以便将行聚合为固定长度的数组,如下所示:
+------+
| col|
+------+
|[a, b]|
|[c, d]|
|[e, f]|
| [g]|
+------+
我试过这个: spark.sql("select collect_list(col) from (select col, row_number() over (order by col) row_number from dataset) group by floor(row_number/2)")
但问题是,我的实际数据集太大,无法在一个分区中处理行号()
1条答案
按热度按时间n3schb8v1#
当您希望分发此文件时,有几个步骤是必要的。
如果您希望运行代码,我将从以下内容开始:
首先,将tyour的Dataframe拆分为一个小的Dataframe,您可以在单个节点上处理,而大的Dataframe的行数是所需数组大小的倍数(在您的示例中,这是2)
通过构造,您可以将原始代码应用于小Dataframe,
现在,我们需要找到一种方法来处理剩余的大型Dataframe。但是,现在我们确定df有很多行,是数组大小的倍数。在这里我们使用了一个很好的技巧,即使用
repartitionByRange
. 基本上,分区保证保留排序,并且当您进行分区时,每个分区将具有相同的大小。现在,可以收集每个分区中的每个数组,最后把这两个结果结合起来就得到了你想要的结果,