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'