Эффективность Spark CountVector

Я проверил исходный код CountVectorizer.

private var broadcastDict: Option[Broadcast[Map[String, Int]]] = None

Он приводит набор данных в соответствие, помещает его в хэш-карты и сокращает его по ключам, получая результат для водителя. То, что у нас есть, это словарный список. Затем использует этот словарь для своей CountVectorizerModel. Модель содержит ссылку, и когда мы хотим преобразование, она транслирует словарь и преобразует в векторы на рабочих узлах параллельно.

Скажем, у меня есть 1 миллион строк слов. Spark разбивает 1 млн слов на рабочих, а затем собирает для подгонки. В модели countvectorizer, которая находится в master, она содержит ссылку на это. Когда мы хотим трансформироваться, это передается рабочим. Таким образом, копия моего 1 миллиона строк словарного запаса существует как у рабочих, так и у мастера.

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

Логично ли использовать CountVector of Spark? Я уже реализовал это в Scala самостоятельно. Вместо того, чтобы использовать этот Spark CountVector, я хочу сохранить эталонную хэш-карту в драйвере и использовать ее. Это эффективно?

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/feature/CountVectorizer.scala

0 ответов

Другие вопросы по тегам