mam system Akka napisany w scala
który trzeba zawołać jakiegoś kodu Python
, powołując się na Pandas
i Numpy
, więc nie można po prostu użyć Jython. Zauważyłem, że Spark używa CPython na swoich węzłach roboczych, więc jestem ciekawy w jaki sposób wykonuje on kod Pythona i czy ten kod istnieje w jakiejś formie wielokrotnego użytku.Jak Spark współpracować z CPython
Odpowiedz
Architektura PySpark jest opisana tutaj https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals.
Jak @Holden powiedział Spark wykorzystuje py4j dostęp do obiektów w Java JVM z pytona. Ale jest to tylko jeden przypadek - kiedy program sterownika jest napisany w pythonie (lewa część diagramu tam)
Drugi przypadek (prawa część diagramu) - kiedy Spark Worker uruchamia proces Pythona i wysyła serializowane obiekty Java do Pythona program do przetworzenia i otrzymuje dane wyjściowe. Obiekty Java są serializowane do formatu pikla - tak, że Python mógłby je odczytać.
Wygląda na to, czego szukasz, to ten drugi przypadek. Oto kilka linków do scala rdzenia iskra, które mogłyby być przydatne dla Ciebie, aby zacząć:
Pyrolite biblioteki, która zapewnia interfejs Java protokołów marynowane Pythona - używany przez Spark do serializacji obiektów Javy w formacie marynaty. Na przykład taka konwersja jest wymagana do uzyskania dostępu do części Key pary Key, Value dla PairRDD.
kod Scala, który uruchamia proces Python i iteracje z nim: api/python/PythonRDD.scala
SerDeser utils że nie zbieranie kodu: api/python/SerDeUtil.scala
Python uboczne: python/pyspark/worker.py
So Spark używa py4j do komunikacji między JVM i Python. Pozwala to Sparkowi pracować z różnymi wersjami Pythona, ale wymaga serializacji danych z JVM i vice versa w celu komunikacji. Więcej informacji na temat py4j pod numerem http://py4j.sourceforge.net/, mam nadzieję, że pomaga :)
- 1. Heroku współpracować bez klonowania
- 2. Czy Atom może współpracować z Pythonem virtualenvwrapper
- 3. jak współpracować z innymi autorami w trybie org?
- 4. Dopasowywanie ciągów: gcc kontra CPython
- 5. Dokumenty dla wewnętrznych implementacji CPython
- 6. CPython to interpreter kodu bajtowego?
- 7. Niezmienność ciągów w CPython naruszone
- 8. Pierwsze rails-api i strong_parameters współpracować
- 9. Jaki jest cel API interpretera w CPython?
- 10. Czy spisek myślenia-sphinx może współpracować?
- 11. Jak stopić Spark DataFrame?
- 12. Spark RDD's - jak działają
- 13. Czy Google Cloud Messaging może współpracować z Facebookiem?
- 14. Jakie są reguły interakcji ciągów cpython?
- 15. Jak utworzyć zestaw danych Spark z RDD
- 16. Jak korzystać z RangePartitioner w Spark
- 17. Jak sprawdzić, czy istnieją zmiany/ulepszenia w dokumentacji CPython
- 18. Jak zbudować Spark ze źródeł ze strony Download Spark?
- 19. Wnioskując Spark TypDanych z napisowych
- 20. odczytu danych z Azure Blob z Spark
- 21. link Spark z ipython Notebook
- 22. Wyjątek Spark z java.lang.ClassNotFoundException: de.unkrig.jdisasm.Disassembler
- 23. Jak obsługiwać model Spark MLlib?
- 24. Jak ustawić liczbę executorów Spark?
- 25. Spark Tachyon: Jak usunąć plik?
- 26. Jak używać indeksów Spark ORC?
- 27. Jak uruchomić Spark na Dockerze?
- 28. Apache Spark vs Apache Spark 2
- 29. W jaki sposób OSGI i JSF mogą współpracować?
- 30. Spark + cassandra: jak stworzyć keyspace?