私はSpark
を使って新しいです。私は巨大なtimeseriesに対処しなければなりません。ベンチマークのために、私はロールメーンのいくつかの実装を比較する必要があります。 numpyの反復モードでは、実際に高速です(1,000,000ポイントで0.055970s、window = 3)。私は、ロール・マンの新しいcomer-in-pysparkバージョンを書いて、結果は恐ろしいものです(同じベクトルでは数秒です)。 は例えば、私はスパークではどのようにロールマンを書いていますか?
ts_list = ["key1", "key2",...,"keyN"]
seq = sc.parallelize(ts_list)
d = {"key1": [1, 2, 3, ...], "key2": [1, 2, 3, ...]}
マイ処理を持っている:
s = seq.map(lambda s: (s, d[s]))\
.flatMap(lambda s: [(s[0], sum(elem)/k) for elem in rolling_window(np.array(s[1]), k)])\
.groupByKey().mapValues(lambda x: list(x))\
.collect()
私は、k個のポイントのために労働者を使用することは価値がないと思います。私はマスターと労働者の間のコミュニケーションは時間がかかると思っています。また、私は並列化または内部の労働者とドライバでデータを読み込む必要がありますか?
ベクターに何兆点ものポイントがある場合はどうなりますか?
されますさて、あなたは 'groupBy'を使用し、その方法は、大量に消費しますすべてのノード間でデータを移動する必要があるためです。 –