Как рассчитать внешнее произведение двух матриц в pyspark - PullRequest
0 голосов
/ 10 января 2019

Предположим, у меня есть кадр данных искры следующим образом. У меня есть два вектора с 20M строк. Один с размером столбца 15000, а другой с размером столбца 200.

>>> df.printSchema()
root
 |-- id: string (nullable = true)
 |-- vec1: vector (nullable = true)
 |-- vec2: vector (nullable = true)

>>> df.count()
20000000
>>> df.rdd.first()[1].size
15000
>>> df.rdd.first()[2].size
200

Представляя два набора векторов в виде матриц A и B, я хочу вычислить A'B, который будет маленькой матрицей 15000 X 200.

Я пытался грубой силой

df.rdd \
.map(lambda row: np.outer(row["vec1"].toArray(), row["vec2"].toArray())) \
.reduce(lambda a,b: a+b)

Это работает с векторами меньшего размера столбца, но не работает с размерностью, с которой я имею дело.

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

Есть ли более эффективный способ вычисления A'B в этом случае?

Спасибо!

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