我自己找到了解决方案(在一些帮助下):
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的编译时工件,根据我在另一个问题中得到的内容,它需要由Scala编译器生成,并且无法用Java生成。因此,我不得不TypeTag在Scala文件中编写我的自定义数据结构,并将其添加到我的Maven Java项目中。为此,我关注了本文。
这是我的MyTypeTags.scala文件:
import scala.reflect.runtime.universe._object MyTypeTags { val SeqInteger = typeTag[Seq[Integer]]}


