Para uma execução do Spark no pyspark, dois componentes são necessários para trabalhar juntos:
pyspark
pacote python
- Instância do Spark em uma JVM
Ao iniciar coisas com spark-submit ou pyspark, esses scripts cuidarão de ambos, ou seja, eles configuram seu PYTHONPATH, PATH, etc, para que seu script possa encontrar pyspark, e eles também iniciem a instância de spark, configurando de acordo com seus parâmetros , por exemplo --master X
Como alternativa, é possível ignorar esses scripts e executar seu aplicativo Spark diretamente no interpretador python python myscript.py
. Isso é especialmente interessante quando os scripts do Spark começam a se tornar mais complexos e, eventualmente, recebem seus próprios argumentos.
- Certifique-se de que o pacote pyspark possa ser encontrado pelo interpretador Python. Conforme já discutido, adicione o dir spark / python ao PYTHONPATH ou instale diretamente o pyspark usando pip install.
- Defina os parâmetros da instância do spark a partir do seu script (aqueles que costumavam ser passados para o pyspark).
- Para configurações do Spark, como você normalmente definiria com --conf, elas são definidas com um objeto de configuração (ou configurações de string) em SparkSession.builder.config
- Para opções principais (como --master ou --driver-mem) no momento, você pode defini-las escrevendo na variável de ambiente PYSPARK_SUBMIT_ARGS. Para tornar as coisas mais limpas e seguras, você pode configurá-lo dentro do próprio Python e o Spark irá lê-lo ao iniciar.
- Inicie a instância, que requer apenas que você chame a
getOrCreate()
partir do objeto construtor.
Portanto, seu script pode ter algo assim:
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())