Как передать объект сложного класса в pyspark через кластеры

Ниже приведен код, где py_cpp_bind относится к коду, написанному на C++11 а затем привязать к Python с помощью boost-python (включено травление). Для инициализации объекта требуется три аргумента (filename, int, int), Я хотел транслировать этот объект по кластерам, так как этот фрагмент необходим для выполнения вычислений для каждого элемента.

Тем не менее, на исполнение Apache Spark, похоже, жалуются

Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:166)
... 15 more

Код:

from pyspark.serializers import BatchedSerializer, PickleSerializer
from pyspark import SparkContext, SparkConf
import py_cpp_binddef populate_NL(n, tk2):
tk = [list(tk2[0]), tk2[1]]
res = mscore.score(tk[1], tk[0])

return resdef main(n, sc):
mscore = py_cpp_bind.score()
# following line constructs the object from the given arguments
print mscore.init("data/earthquake.csv", n, 4000)

broadcastVar = sc.broadcast(mdl)

C = [((0,), [1])]
C = sc.parallelize(C).flatMap(lambda X : populate(n, X))
print(C.collect())

if __name__ == "__main__":

conf = SparkConf().setMaster("local[*]")
conf = conf.setAppName("TEST")
sc = SparkContext(conf = conf, serializer=PickleSerializer())
n = 5
main(n, sc)

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …