我正在使用Spark with Java,当我在两个数据帧之间建立连接时,结果的顺序是不同的。
我需要保留订单,因为我想在。之后将数据插入HBase表。
在Scala中有一个使用seq列表的解决方案,我想知道如何使用Java?
答案 0 :(得分:1)
我找到的解决方案是创建一个列数组(来自org.apache.spark.sql.Column)。希望当你进行选择时,它会保留数组顺序。由于我从未在其他地方找到过此解决方案,因此我决定将其发布在此处。
//after making a join into my DF called "joinedDF" I do this:
//example of schema from string
String schemaFull= "id_meta;source_name_meta;base_name_meta;...";
String[] strColumns = schemaFull.split(";");
org.apache.spark.sql.Column[] selectedCols = new org.apache.spark.sql.Column[strColumns.length];
for (int i=0; i < strColumns.length; i++){
selectedCols[i] = col(strColumns[i]);
}
joinedDF = joinedDF.select(selectedCols);
答案 1 :(得分:1)
您还可以使用以下方法在Java中创建Scala Seq:
import scala.collection.JavaConversions;
import scala.collection.Seq;
import static java.util.Arrays.asList;
Seq<String> seq = JavaConversions.asScalaBuffer(asList("col_1","col_2"));