如何在Java中获取类的TypeTag

时间:2018-10-29 02:18:00

标签: java scala apache-spark

我正在尝试从my other question中的Spark库调用functions.typedLitit asks for two parameters是文字对象及其类型(TypeTag)。

第一个论点,我可以提出自己(我认为)。但是对于第二个对象,我不知道如何为它实例化一个对象。我正在尝试将TypeTag<Seq<Integer>>作为第二个参数。

有人可以告诉我如何在 Java 中为TypeTag创建Seq<Integer>吗?这是我要完成的代码:

Seq<Integer> seq =  JavaConverters
                      .asScalaIteratorConverter((new ArrayList<Integer>()).iterator())
                      .asScala()
                      .toSeq();
Column litColumn = functions.<Seq<Integer>>typedLit(seq, ???)

1 个答案:

答案 0 :(得分:1)

在另一个问题中我说

  

并从Java提供CanBuildFrom参数是...从技术上来说是可行的,但您不希望这样做。

不幸的是,对于TypeTag来说,可能性甚至更低:与CanBuildFrom不同,它们不是由库提供的,而是内置在Scala编译器中的。

我能提供的最佳建议是创建一个Scala文件,提供需要从Java使用的类型标签,因为您只需要有限数量的标签即可:

object TypeTags {
  val SeqInteger = typeTag[Seq[Integer]]
  ...
  // or 
  val Integer = typeTag[Integer]
  def Seq[A](implicit tt: TypeTag[A]) = typeTag[Seq[A]]
}

,然后从Java TypeTags.SeqIntegerTypeTags.Seq(TypeTags.Integer)开始。

在其他地方,Spark提供了可从Java使用的特殊API(查找.java软件包),但找不到functions.typedLit的API。