1 回答

TA貢獻1719條經(jīng)驗 獲得超6個贊
我自己找到了解決方案(在一些幫助下):
Map<File, Dataset<Row> allWords = ...
StructField[] structFields = new StructField[] {
new StructField("word", DataTypes.StringType, false, Metadata.empty()),
new StructField("count", DataTypes.IntegerType, false, Metadata.empty()),
new StructField("files", DataTypes.createArrayType(DataTypes.IntegerType), true, Metadata.empty())
};
StructType structType = new StructType(structFields);
Dataset<Row> allFilesWords = spark.createDataFrame(new ArrayList<>(), structType);
for (Map.Entry<File, Dataset<Row>> entry : allWords.entrySet()) {
Integer fileIndex = files.indexOf(entry.getKey());
allFilesWords.unionAll(
allWords.get(entry.getKey())
.withColumn("files", functions.typedLit(seq, MyTypeTags.SeqInteger()))
);
}
問題是這TypeTag是來自 Scala 的編譯時工件,根據(jù)我在另一個問題中得到的內(nèi)容,它需要由 Scala 編譯器生成,而您無法在 Java 中生成一個。因此,我必須TypeTag在 Scala 文件中編寫自定義數(shù)據(jù)結構并將其添加到我的 Maven Java 項目中。為此,我關注了這篇文章。
這是我的MyTypeTags.scala文件:
import scala.reflect.runtime.universe._
object MyTypeTags {
val SeqInteger = typeTag[Seq[Integer]]
}
添加回答
舉報