Ho un sistema di Akka scritto in scala
che ha bisogno di chiamare a un certo codice Python
, basandosi su Pandas
e Numpy
, quindi non può semplicemente utilizzare Jython. Ho notato che Spark usa CPython sui suoi nodi worker, quindi sono curioso di sapere come si esegue il codice Python e se quel codice esiste in qualche forma riutilizzabile.Come fa Spark interoperare con CPython
risposta
L'architettura di PySpark è descritta qui https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals.
Come @Holden detto Spark utilizza py4j per accedere agli oggetti Java nella JVM dal pitone. Ma questo è solo un caso - quando il programma del driver è scritto in python (parte sinistra del diagramma)
L'altro caso (la parte destra del diagramma) - quando Spark Worker avvia il processo Python e invia oggetti serializzati Java a python programma da elaborare e riceve output. Gli oggetti Java sono serializzati in formato pickle, quindi python potrebbe leggerli.
Sembra che quello che stai cercando è il secondo caso. Ecco alcuni link per nucleo scala della scintilla che potrebbero essere utili per voi per iniziare:
Pyrolite libreria che fornisce l'interfaccia Java per i protocolli di salamoia di Python - usato da Spark per serializzare oggetti Java in formato salamoia. Ad esempio tale conversione è necessaria per accedere alla parte Chiave della chiave, coppie di valori per il PairRDD.
codice Scala che avvia processo pitone e scorre con esso: api/python/PythonRDD.scala
utils SerDeser che la raccolta del codice: api/python/SerDeUtil.scala
pitone collaterali: python/pyspark/worker.py
Quindi Spark utilizza py4j per comunicare tra JVM e Python. Ciò consente a Spark di funzionare con diverse versioni di Python ma richiede la serializzazione dei dati dalla JVM e viceversa per comunicare. Ci sono più informazioni su py4j a http://py4j.sourceforge.net/, speriamo che sia di aiuto :)
- 1. come gli eventi WinRT sono interoperare con .NET
- 2. Come posso ottenere C# per interoperare con Javascript?
- 3. CPython è l'interprete bytecode?
- 4. Come viene implementato string.find in CPython?
- 5. Spark UDF con vararg
- 6. Come appiattire una collezione con Spark/Scala?
- 7. Come posso usare proto3 con Hadoop/Spark?
- 8. Come vengono implementati generatori e coroutine in CPython?
- 9. Quale generatore di parser utilizza CPython?
- 10. IronPython ScriptRuntime equivalente a CPython PYTHONPATH
- 11. Immutabilità di stringa in CPython violata
- 12. compatibilità tra CPython e IronPython cPickle
- 13. C'è qualche differenza tra cpython e python
- 14. Spark RDD's - come funzionano
- 15. più applicazioni Spark con HiveContext
- 16. Chiavi primarie con Apache Spark
- 17. Lambda Architecture con Apache Spark
- 18. Spark Matrix moltiplicazione con python
- 19. CPython - Internamente, cosa viene memorizzato nello stack e nell'heap?
- 20. Apache Spark: Come posso convertire uno Spark DataFrame in un RDD con tipo RDD [(Tipo1, Tipo2, ...)]?
- 21. errore JAVA_HOME con aggiornamento a 1.3.0 Spark
- 22. Come condividere Spark RDD tra 2 contesti Spark?
- 23. Qual è lo scopo dell'API sub-interpreter in CPython?
- 24. Come si fa l'animazione 'seriale' con GCD?
- 25. Running spark-submit con --master yarn-cluster: emissione con spark-assembly
- 26. Spark: eseguire InputFormat come singleton
- 27. Spark con Arvo, Kryo e Parquet
- 28. Spark-View-Engine con ASP.NET MVC2
- 29. Lettura da Cassandra con Spark Streaming
- 30. Spark: Get top N con chiave