web-dev-qa-db-fra.com

Comment accéder à SparkContext dans le script pyspark

La question SOF suivante Comment exécuter un script dans Pyspark et le déposer dans IPython Shell une fois terminé? explique comment lancer un script pyspark:

 %run -d myscript.py

Mais comment pouvons-nous accéder au contexte existin spark?

Le simple fait d'en créer un nouveau ne fonctionne pas:

 ---->  sc = SparkContext("local", 1)

 ValueError: Cannot run multiple SparkContexts at once; existing 
 SparkContext(app=PySparkShell, master=local) created by <module> at 
 /Library/Python/2.7/site-packages/IPython/utils/py3compat.py:204

Mais essayer d'utiliser un existant .. eh bien quel existant?

In [50]: for s in filter(lambda x: 'SparkContext' in repr(x[1]) and len(repr(x[1])) < 150, locals().iteritems()):
    print s
('SparkContext', <class 'pyspark.context.SparkContext'>)

c'est-à-dire qu'il n'y a pas de variable pour une instance SparkContext

12
javadba

de pyspark.context importer SparkContext

puis appelez une méthode statique sur SparkContext comme:

sc = SparkContext.getOrCreate()
44
TechnoIndifferent

autonome python pour wordcount: écrire un contexte spark réutilisable en utilisant contextmanager

"""SimpleApp.py"""
from contextlib import contextmanager
from pyspark import SparkContext
from pyspark import SparkConf


SPARK_MASTER='local'
SPARK_APP_NAME='Word Count'
SPARK_EXECUTOR_MEMORY='200m'

@contextmanager
def spark_manager():
    conf = SparkConf().setMaster(SPARK_MASTER) \
                      .setAppName(SPARK_APP_NAME) \
                      .set("spark.executor.memory", SPARK_EXECUTOR_MEMORY)
    spark_context = SparkContext(conf=conf)

    try:
        yield spark_context
    finally:
        spark_context.stop()

with spark_manager() as context:
    File = "/home/ramisetty/sparkex/README.md"  # Should be some file on your system
    textFileRDD = context.textFile(File)
    wordCounts = textFileRDD.flatMap(lambda line: line.split()).map(lambda Word: (Word, 1)).reduceByKey(lambda a, b: a+b)
    wordCounts.saveAsTextFile("output")

print "WordCount - Done"

pour lancer:

/bin/spark-submit SimpleApp.py
3
vijay kumar

Lorsque vous tapez pyspark sur le terminal, python crée automatiquement le contexte spark sc.

1
mnm