如何在spark(java)中迭代数据集的所有列

如何在spark(java)中迭代数据集的所有列,java,apache-spark,foreach,iteration,Java,Apache Spark,Foreach,Iteration,我有一个数据集,有许多列(实际上是11000列,但可能更多),大约有40000行。我试图做的是对所有这些列应用一个UDF(这个UDF只是通过用字符替换来缩短列的字符串)。我的方法工作得很好,但效率很低,因为我使用for循环来迭代所有列。是否有机会使用foreach()函数或类似的函数来并行执行所有11000列 sqlContext.udf().register(“replaceStringByChar”,replaceStringByChar,DataTypes.StringType); for

我有一个数据集,有许多列(实际上是11000列,但可能更多),大约有40000行。我试图做的是对所有这些列应用一个UDF(这个UDF只是通过用字符替换来缩短列的字符串)。我的方法工作得很好,但效率很低,因为我使用for循环来迭代所有列。是否有机会使用foreach()函数或类似的函数来并行执行所有11000列

sqlContext.udf().register(“replaceStringByChar”,replaceStringByChar,DataTypes.StringType);
for(字符串c:ds.columns()){
ds=ds.withColumn(c,functions.callUDF(“replaceStringByChar”,ds.col(c));
}

我认为这样的方法应该行得通

ds.columns().foreach(列->{
System.out.println(“列”+列);
});

我认为这样的方法应该行得通

ds.columns().foreach(列->{
System.out.println(“列”+列);
});

我遇到了类似的问题,我使用
数据集
对象的
with columns
方法找到了解决方案。查看此帖子: 你的情况是这样的:

List<String> fieldsNameList = ds.columns();
Seq<String> fieldsNameSeq = JavaConversions.asScalaBuffer(fieldsNameList).seq();

List<Column> whenColumnList = new ArrayList(Arrays.asList());

for (String c : ds.columns()) {
        Column whenColumn = functions.callUDF("replaceStringByChar", ds.col(c))
        whenColumnList.add(whenColumn)
}

Seq<Column> whenColumnSeq = JavaConversions.asScalaBuffer(whenColumnList).seq();

Dataset<Row>  ds_new = ds.withColumns(fieldsNameSeq, whenColumnSeq);

List fieldsNameList=ds.columns();
Seq fieldsnamesq=JavaConversions.asScalaBuffer(fieldsNameList.Seq();
List whenColumnList=newArrayList(Arrays.asList());
for(字符串c:ds.columns()){
Column=functions.callUDF(“replaceStringByChar”,ds.col(c))时的列
whenColumnList.add(whenColumn)
}
Seq whenColumnSeq=JavaConversions.asScalaBuffer(whenColumnList.Seq();
数据集ds_new=ds.withColumns(fieldsnamesq,whenColumnSeq);

我遇到了类似的问题,我使用
数据集
对象的
with columns
方法找到了解决方案。查看此帖子: 你的情况是这样的:

List<String> fieldsNameList = ds.columns();
Seq<String> fieldsNameSeq = JavaConversions.asScalaBuffer(fieldsNameList).seq();

List<Column> whenColumnList = new ArrayList(Arrays.asList());

for (String c : ds.columns()) {
        Column whenColumn = functions.callUDF("replaceStringByChar", ds.col(c))
        whenColumnList.add(whenColumn)
}

Seq<Column> whenColumnSeq = JavaConversions.asScalaBuffer(whenColumnList).seq();

Dataset<Row>  ds_new = ds.withColumns(fieldsNameSeq, whenColumnSeq);

List fieldsNameList=ds.columns();
Seq fieldsnamesq=JavaConversions.asScalaBuffer(fieldsNameList.Seq();
List whenColumnList=newArrayList(Arrays.asList());
for(字符串c:ds.columns()){
Column=functions.callUDF(“replaceStringByChar”,ds.col(c))时的列
whenColumnList.add(whenColumn)
}
Seq whenColumnSeq=JavaConversions.asScalaBuffer(whenColumnList.Seq();
数据集ds_new=ds.withColumns(fieldsnamesq,whenColumnSeq);

我想我不能对columns()应用foreach(),我想我不能对columns()应用foreach(),