Spark: Wie kann man "ReducedByKey" ausführen, wenn die Schlüssel numpy Arrays sind, die nicht hashbar sind?

Ich habe eine RDD von (Schlüssel-, Wert-) Elementen. Die Schlüssel sind NumPy-Arrays. NumPy-Arrays sind nicht hashbar, und dies verursacht ein Problem, wenn ich versuche, ein @ zu machereduceByKey Betrieb

Gibt es eine Möglichkeit, den Spark-Kontext mit meiner manuellen Hash-Funktion zu versorgen? Oder gibt es eine andere Möglichkeit, dieses Problem zu umgehen (außer die Arrays tatsächlich "offline" zu hacken und nur den gehashten Schlüssel an Spark zu übergeben)?

Hier ist ein Beispiel

import numpy as np
from pyspark import SparkContext

sc = SparkContext()

data = np.array([[1,2,3],[4,5,6],[1,2,3],[4,5,6]])
rd = sc.parallelize(data).map(lambda x: (x,np.sum(x))).reduceByKey(lambda x,y: x+y)
rd.collect()

Der Fehler ist:

Beim Aufrufen von z: org.apache.spark.api.python.PythonRDD.collectAndServe ist ein Fehler aufgetreten.

...

TypeError: unhashable type: 'numpy.ndarray'

Antworten auf die Frage(2)

Ihre Antwort auf die Frage