【问题标题】:How to submit a python wordcount on HDInsight Spark cluster from Jupyter如何从 Jupyter 在 HDInsight Spark 群集上提交 python 字数
【发布时间】:2016-06-02 10:13:55
【问题描述】:

我正在尝试在 Spark HDInsight 群集上运行 python 字数统计,并且从 Jupyter 运行它。我实际上不确定这是否是正确的方法,但我找不到任何关于如何在 HDInsight Spark 集群上提交独立 python 应用程序的有用信息。

代码:

import pyspark
import operator
from pyspark import SparkConf
from pyspark import SparkContext
import atexit
from operator import add
conf = SparkConf().setMaster("yarn-client").setAppName("WC")
sc = SparkContext(conf = conf)
atexit.register(lambda: sc.stop())

input = sc.textFile("wasb:///example/data/gutenberg/davinci.txt")
words = input.flatMap(lambda x: x.split())
wordCount = words.map(lambda x: (str(x),1)).reduceByKey(add)

wordCount.saveAsTextFile("wasb:///example/outputspark")

以及我收到但不理解的错误消息:

ValueError                                Traceback (most recent call last)
<ipython-input-2-8a9d4f2cb5e8> in <module>()
      6 from operator import add
      7 import atexit
----> 8 sc = SparkContext('yarn-client')
      9 
     10 input = sc.textFile("wasb:///example/data/gutenberg/davinci.txt")

/usr/hdp/current/spark-client/python/pyspark/context.pyc in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    108         """
    109         self._callsite = first_spark_call() or CallSite(None, None, None)
--> 110         SparkContext._ensure_initialized(self, gateway=gateway)
    111         try:
    112             self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,

/usr/hdp/current/spark-client/python/pyspark/context.pyc in _ensure_initialized(cls, instance, gateway)
    248                         " created by %s at %s:%s "
    249                         % (currentAppName, currentMaster,
--> 250                             callsite.function, callsite.file, callsite.linenum))
    251                 else:
    252                     SparkContext._active_spark_context = instance

ValueError: Cannot run multiple SparkContexts at once; existing SparkContext(app=pyspark-shell, master=yarn-client) created by __init__ at <ipython-input-1-86beedbc8a46>:7 

真的可以这样运行python作业吗?如果是 - 这似乎是 SparkContext 定义的问题......我尝试了不同的方法:

sc = SparkContext('spark://headnodehost:7077', 'pyspark')

conf = SparkConf().setMaster("yarn-client").setAppName("WordCount1")
sc = SparkContext(conf = conf)

但没有成功。运行作业或配置 SparkContext 的正确方法是什么?

【问题讨论】:

    标签: python apache-spark pyspark azure-hdinsight jupyter-notebook


    【解决方案1】:

    看来我可以自己回答我的问题。 代码中的一些更改被证明是有帮助的:

    conf = SparkConf()
    conf.setMaster("yarn-client")
    conf.setAppName("pyspark-word-count6")
    sc = SparkContext(conf=conf)
    atexit.register(lambda: sc.stop())
    
    data = sc.textFile("wasb:///example/data/gutenberg/davinci.txt")
    words = data.flatMap(lambda x: x.split())
    wordCount = words.map(lambda x: (x.encode('ascii','ignore'),1)).reduceByKey(add)
    
    wordCount.saveAsTextFile("wasb:///output/path")
    

    【讨论】:

      【解决方案2】:

      我刚刚在我的代码中解决了一个类似的错误,发现这是因为 pyspark 只接受来自 SparkContext() 的一个对象。一旦提交,代码的任何更改和运行都会遇到该问题并返回错误消息初始化。我的解决方案只是重新启动平台内核,并在重新启动笔记本时重新运行我的笔记本脚本。然后它运行没有错误。

      【讨论】:

        【解决方案3】:

        如果您从 Jupyter Notebook 运行,则会为您预先创建 Spark 上下文,创建单独的上下文是不正确的。要解决此问题,只需删除创建上下文的行并直接从以下位置开始:

        input = sc.textFile("wasb:///example/data/gutenberg/davinci.txt")
        

        如果您需要运行独立程序,您可以使用 pyspark 从命令行运行它,或者使用集群上运行的 Livy 服务器使用 REST API 提交它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-20
          • 2020-10-31
          • 2017-09-13
          相关资源
          最近更新 更多