Как перенести SortedSet в Seq или Array, чтобы использовать API набора данных Spark с кодировщиками? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь перенести одно из моих приложений из RDD в набор данных. Бизнес-логика сильно зависит от уникальности и сортировки, поэтому ранее мы использовали SortedSet.

SortedSet - это в основном TreeSet в Scala, и он обеспечивает сложность O (log N) для поиска, вставки и удаления.

К сожалению, в текущей версии Spark нет возможности использовать API набора данных с этой коллекцией, и единственным решением является использование сериализации крио, что в данном случае нежелательно для меня.

Я хочу найти способ обойти эту проблему и использовать кодеры в обмен на использование высокой сложности пространства, но хорошей сложности времени.

Вот один из примеров.

case class A(value: Long) extends AnyVal {
  def +(delta: Long): A = A(value + delta)
  def -(delta: Long): A = A(value - delta)
}

case class B (values: SortedSet[A]) {
  def +(a: A): B = B(values + a)
  def -(a: A): B = B(values - a)

  def ++(that: B): B = B(values ++ that.values)
  def --(that: B): B = B(values -- that.values)

  def lastTA: Option[A] = values.lastOption
}

Этот код не будет работать во время выполнения из-за кодировщиков. Spark позволяет нам хранить Array или Seq внутри набора данных. Решение должно предотвращать дублирование и обеспечивать сортировку (вставку, удаление и т. Д.).

Какой способ будет наиболее подходящим?

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