Как получить TypeTag для класса в Java - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь вызвать functions.typedLit из библиотеки Spark в мой другой вопрос он запрашивает два параметра , буквальный объект и его тип (a TypeTag).

Первый аргумент, который я могу придумать сам (я думаю).Но что касается второго, я не знаю, как создать экземпляр объекта для него.Я пытаюсь передать TypeTag<Seq<Integer>> в качестве второго параметра.

Может кто-нибудь подсказать, как создать TypeTag для Seq<Integer> в Java ?Вот код, который я пытаюсь завершить:

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

1 Ответ

0 голосов
/ 29 октября 2018

В вашем другом вопросе я сказал

и предоставление аргумента CanBuildFrom из Java ... технически возможно, но не то, что вы хотите сделать.

К сожалению, для 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.SeqInteger или TypeTags.Seq(TypeTags.Integer).

В других местах Spark предоставляет специальный API для использования из Java (ищите пакеты .java), но я не смог найти его для functions.typedLit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...