Java Spark:GroupBy上的堆栈溢出错误

Java Spark:GroupBy上的堆栈溢出错误,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我将Spark 2.3.1与Java一起使用 我有一个数据集,我想将其分组以进行一些聚合(例如,使用count()。必须根据给定的列列表进行分组 我的职能如下: public Dataset<Row> compute(Dataset<Row> data, List<String> columns){ final List<Column> columns_col = new ArrayList<Column>(); f

我将Spark 2.3.1与Java一起使用

我有一个数据集,我想将其分组以进行一些聚合(例如,使用count()。必须根据给定的列列表进行分组

我的职能如下:

public Dataset<Row> compute(Dataset<Row> data, List<String> columns){

    final List<Column> columns_col = new ArrayList<Column>();

    for (final String tag : columns) {
        columns_col.add(new Column(tag));
    }

    Seq<Column> columns_seq = JavaConverters.asScalaIteratorConverter(columns_col.iterator()).asScala().toSeq();

    System.out.println("My columns : "+columns_seq.mkString(", "));
    System.out.println("Data count : "+data.count());

    final Dataset<Row> dataset_count = data.groupBy(columns_seq).agg(count(col("value")));

    System.out.println("Result count : "+dataset_count.count()); 

    return dataset_count;
}       
但是如果我在我的函数中替换该行

final Dataset<Row> dataset_count = data.groupBy(columns_seq).agg(count(col("value")));
此问题可能来自何处?是否有根据未知列列表对数据集进行分组的解决方案?

替换

JavaConverters.asScalaIteratorConverter(columns_col.iterator()).asScala().toSeq();
用于:


为我做了这项工作(经过全面测试)。

尝试使用以下方法:

Seq<Column> columns_seq = JavaConversions.asScalaBuffer(columns_col).seq();
Seq columns\u Seq=JavaConversions.asScalaBuffer(columns\u col.Seq();

试着用这个来代替:“Seq columns\u Seq=JavaConversions.asScalaBuffer(columns\u col.Seq()”@abdennacerachiheb你真的把我从数小时数天的挫折中解救了出来。请考虑把你的评论作为答案-这是solution@PALEN我很高兴它对你有用,我补充说,因为它可能会帮助别人。
final Dataset<Row> dataset_count = data.groupBy("field1","field2","field3","field4").agg(count(col("value")));
My columns : field1, field2, field3, field4
Data count : 136821
Result count : 74698
JavaConverters.asScalaIteratorConverter(columns_col.iterator()).asScala().toSeq();
JavaConversions.asScalaBuffer(columns_col).seq()
Seq<Column> columns_seq = JavaConversions.asScalaBuffer(columns_col).seq();