Ниже приведен код, где 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)
Задача ещё не решена.
Других решений пока нет …