У меня есть то, что кажется простой проблемой, но я продолжаю биться головой об стену, но безуспешно.По сути, я пытаюсь сделать то же самое, что и в этом сообщении , за исключением того, что мне не важен аспект "группы по" этого сообщения, я просто хочу суммировать по всем строкам .
Чтобы перефразировать связанный пост, DataFrame выглядит следующим образом:
ID,Vec
1,[0,0,5]
2,[3,3,4]
3,[0,8,1]
....
Я хотел бы поэлементно суммировать векторы.
Требуемый результат вышеприведенногоПримером может служить одна строка:
SumOfVectors
[3,11,10]
Другая большая разница в том, что Я использую pyspark , а не Scala.Я попытался заставить rdd.fold()
работать, но либо он не работает так же, либо я не могу понять синтаксис в pyspark.
Последнее замечание: я делаю это на кадре данныхСтроки ~ 1MM и вектор длиной ~ 10k, так что это должно быть достаточно эффективно.
Спасибо за любую помощь!Воспроизводимый игрушечный фрейм данных ниже, согласно комментариям.
import numpy as np
from pyspark.ml.linalg import Vectors
n_rows = 100
pdf = np.concatenate([np.array(range(n_rows)), np.random.randn(n_rows), 3*np.random.randn(n_rows)+2, 6*np.random.randn(n_rows)-2]).reshape(n_rows,-1)
dff = map(lambda x: (int(x[0]), Vectors.dense(x[1:])), pdf)
df = spark.createDataFrame(dff,schema=["ID", "Vec"])
df.schema
должен выглядеть как StructType(List(StructField(ID,LongType,true),StructField(Vec,VectorUDT,true)))
просто печать df
дает мне DataFrame[ID: bigint, Vec: vector]
Также возможно значение, Я на Spark 2.4
$ spark-submit --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.0
/_/
Using Scala version 2.11.12, OpenJDK 64-Bit Server VM, 1.8.0_191
Branch HEAD
Compiled by user ec2-user on 2018-12-07T19:51:27Z
Revision bab859f34a291cb7b3f4e724b59e1b48af69016b
Url git@aws157git.com:/pkg/Aws157BigTop
Type --help for more information.