2015-03-11 3 views
2

Следующий вопрос SOF How to run script in Pyspark and drop into IPython shell when done? рассказывает, как запустить pyspark скрипт:Как получить доступ к SparkContext в pyspark сценарии

%run -d myscript.py 

Но как мы получаем доступ к existin контекст свечи?

Просто создать новый не работает:

----> 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 

Но попытка использовать существующий .. хорошо , что существующий?

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'>) 

т.е. нет переменной для экземпляра SparkContext

+0

Что происходит, когда вы запускаете этот первый: 'от pyspark импорта SparkContext'? – dnlbrky

+1

С Spark 2.0.0 и далее, «sparkSession», которую вы можете создать без столкновения, имеет свойство «sparkContext» для доступа к исходному контексту. –

ответ

16

из pyspark.context импорта SparkContext

, а затем вызвать статический метод на SparkContext как:

sc = SparkContext.getOrCreate() 
+0

Добавьте некоторое объяснение с ответом на вопрос, как этот ответ помогает OP в устранении текущей проблемы. –

+0

sc - это существующий SparkContext OP. Раньше не было никакого способа получить существующий SparkContext, но статический метод getOrCreate() был добавлен для получения и существующего контекста или создания нового, если он не существует. – TechnoIndifferent

+0

Это работает для меня! 3x! но можете ли вы объяснить это, пожалуйста? – Statham

0

При вводе pyspark на терминале, Python автоматически создает искру контекста подкожно.

+0

Это программа bin/pyspark *, а не отдельный сценарий pyspark * *. – javadba

+0

И переменная sc не создается автоматически, экземпляр SparkContext создается автоматически. –

0

Standalone питон скрипт для WordCount: написать многоразовый контекст искровой с помощью 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" 

для запуска:

/bin/spark-submit SimpleApp.py 
Смежные вопросы