这个问题在这里已经有答案了:
groupby之后如何将值聚合到集合中(3个答案)
六个月前关门了。
我有一个数据集如下;col1的值重复多次,col2的值是唯一的。这个原始数据集几乎可以容纳10亿行,所以我不想使用collect或collect\u list,因为它不会扩展到我的用例。
原始数据集:
+---------------------|
| col1 | col2 |
+---------------------|
| AA| 11 |
| BB| 21 |
| AA| 12 |
| AA| 13 |
| BB| 22 |
| CC| 33 |
+---------------------|
我想将数据集转换为以下数组格式。newcolumn作为col2的数组。
转换的数据集:
+---------------------|
|col1 | newColumn|
+---------------------|
| AA| [11,12,13]|
| BB| [21,22] |
| CC| [33] |
+---------------------|
我见过这个解决方案,但它使用collect\u list,不会扩展到大数据集。
2条答案
按热度按时间bpsygsoo1#
使用spark的内置函数总是最好的方法。我认为使用collect\u list函数没有问题。只要你有足够的记忆力,这将是最好的方法。优化作业的一种方法是将数据保存为parquet,按列a存储数据并将其保存为表。更好的做法是用一些均匀分布数据的列对其进行分区。
例如,
这将加速聚合并避免大量的洗牌。试试看
polhcujo2#
加载Dataframe
分组依据
col1
骨料col2
使用collect_list
```import org.apache.spark.sql.functions
object GroupToArray {
def main(args: Array[String]): Unit = {
}
}