Предположим, у меня есть кадр данных искры следующим образом. У меня есть два вектора с 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 в этом случае?
Спасибо!