spark2.3.0 的agg 方法现在限制数量,30个可以,60个不可以,记录一下
以后agg超过30个之后需要分次处理
原代码
scala
val intervalCollectArr = df.agg(cols.toArray.head, cols.toArray.tail: _*).collect().apply(0)
修改为
scala
var len = cols.length
var intervalRDD: RDD[Row] = null
val n = 30
while(len > n) {
val cols2 = cols.toArray.take(n)
cols.remove(n)
if (intervalRDD == null) intervalRDD = df.agg(cols2.head, cols2.tail: _*).rdd
else intervalRDD = intervalRDD.zip(df.agg(cols2.head, cols2.tail: _*).rdd).map(row => {
var res = new ArrayBuffer[Any]
res ++= row._1.toSeq
res ++= row._2.toSeq
Row.fromSeq(res)
})
len -= n
}
val intervalCollectArr = intervalRDD.collect().apply(0)