Для выполнения Spark в pyspark два компонента должны работать вместе:
pyspark
пакет python
- Экземпляр Spark в JVM
При запуске вещей с помощью spark-submit или pyspark эти сценарии позаботятся об обоих, т.е. они настроят ваш PYTHONPATH, PATH и т.д., чтобы ваш сценарий мог найти pyspark, и они также запускают экземпляр Spark, настраивая в соответствии с вашими параметрами , например --master X
В качестве альтернативы можно обойти эти сценарии и запустить приложение Spark непосредственно в интерпретаторе Python, например python myscript.py
. Это особенно интересно, когда искровые скрипты становятся более сложными и в конечном итоге получают свои собственные аргументы.
- Убедитесь, что пакет pyspark может быть найден интерпретатором Python. Как уже обсуждалось, добавьте каталог spark / python в PYTHONPATH или напрямую установите pyspark с помощью pip install.
- Задайте параметры экземпляра Spark из вашего скрипта (те, которые раньше передавались в pyspark).
- Для конфигураций искры, которые вы обычно устанавливаете с помощью --conf, они определяются с помощью объекта конфигурации (или строковых конфигураций) в SparkSession.builder.config
- Для основных параметров (таких как --master или --driver-mem) на данный момент вы можете установить их, записав в переменную среды PYSPARK_SUBMIT_ARGS. Чтобы сделать вещи чище и безопаснее, вы можете установить его из самого Python, и Spark будет читать его при запуске.
- Запустите экземпляр, который просто требует вызова
getOrCreate()
из объекта построителя.
Таким образом, ваш сценарий может иметь что-то вроде этого:
from pyspark.sql import SparkSession
if __name__ == "__main__":
if spark_main_opts:
# Set main options, e.g. "--master local[4]"
os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"
# Set spark config
spark = (SparkSession.builder
.config("spark.checkpoint.compress", True)
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
.getOrCreate())