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)