Разреженные и плотные векторы Пыспарк
Как я могу знать, Следует ли мне использовать разреженное или плотное представление в PySpark? Я понимаю различия между ними (разреженная память сохраняет только ненулевые индексы и значения), но с точки зрения производительности, есть ли какие-либо общие эвристики, которые описывают, когда использовать разреженные векторы над плотными?
Существует ли общее измерение "отсечения" и процент значений 0, за пределами которого обычно лучше использовать разреженные векторы? Если нет, то как я должен идти о создании решение? Спасибо.
1 ответ:
Следует помнить, что
pyspark.ml.linalg.Vector
иpyspark.mllib.linalg.Vector
- это всего лишь уровень совместимости между Python и Java API. Не существует полнофункциональных или оптимизированных утилит линейной алгебры, и вы не должны использовать их как таковые. Доступные операции либо не рассчитаны на производительность, либо просто преобразуются в стандартный массив NumPy под чехлами.При использовании с другими
Это означает, что самая большая реальная проблема-хранение, и простое эмпирическое правило:ml
/mllib
инструменты там будут сериализованы и преобразованы в эквиваленты Java, так что производительность представления Python в основном непоследовательный.
- Если в среднем половина записей равна нулю, то лучше использовать
В противном случае лучше использоватьSparseVector
.DenseVector
.