Spark Scala中限制collect_list结果的元素数量
解决Spark Scala中collect_list结果截断至最多30个元素的问题
直接使用Spark内置的slice函数就能实现需求,它可以对数组进行截取,保留前N个元素(数组长度不足时原样保留)。修改后的代码如下:
db.groupBy("ids") .agg(collect_list("names") as "alias") .select( $"ids", slice($"alias", 1, 30).alias("alias") )
关键说明:
slice函数的参数规则:第一个参数是目标数组列,第二个是起始位置(Spark中数组索引从1开始),第三个是要截取的元素数量。- 该逻辑会自动适配两种场景:
- 当
alias的元素数量≤30时,返回原数组 - 当元素数量>30时,仅保留前30个元素
- 当
内容的提问来源于stack exchange,提问作者Jericho Sims
相关产品推荐
相关产品推荐

