Разреженные и плотные векторы Пыспарк


Как я могу знать, Следует ли мне использовать разреженное или плотное представление в PySpark? Я понимаю различия между ними (разреженная память сохраняет только ненулевые индексы и значения), но с точки зрения производительности, есть ли какие-либо общие эвристики, которые описывают, когда использовать разреженные векторы над плотными?

Существует ли общее измерение "отсечения" и процент значений 0, за пределами которого обычно лучше использовать разреженные векторы? Если нет, то как я должен идти о создании решение? Спасибо.

1 3

1 ответ:

Следует помнить, что pyspark.ml.linalg.Vector и pyspark.mllib.linalg.Vector - это всего лишь уровень совместимости между Python и Java API. Не существует полнофункциональных или оптимизированных утилит линейной алгебры, и вы не должны использовать их как таковые. Доступные операции либо не рассчитаны на производительность, либо просто преобразуются в стандартный массив NumPy под чехлами.

При использовании с другими ml / mllib инструменты там будут сериализованы и преобразованы в эквиваленты Java, так что производительность представления Python в основном непоследовательный.

Это означает, что самая большая реальная проблема-хранение, и простое эмпирическое правило:
  • Если в среднем половина записей равна нулю, то лучше использовать SparseVector.
  • В противном случае лучше использовать DenseVector.