没有 spark-submit 的 Exec pyspark 独立脚本

Posted

技术标签:

【中文标题】没有 spark-submit 的 Exec pyspark 独立脚本【英文标题】:Exec pyspark standalone script without spark-submit 【发布时间】:2018-06-03 03:51:01 【问题描述】:

我是在 Linux 机器上安装 spark 的新手,可能有一个基本问题: 我已经安装了 Spark 1.6.0 和 Python 2.6.6

在 spark 交互模式下,我可以运行这些简单的命令来计算 README.md 文件中的行数。

但是,我希望能够创建一个独立的 Python 脚本并获得相同的结果,但我遇到了错误。

我在 test.py 中的 python 代码 -

#!/usr/bin/python
import pyspark
from pyspark import SparkContext, SparkConf

if __name__ == "__main__":
    conf = SparkConf().setAppName("word count").setMaster("local[3]")
    sc = SparkContext(conf = conf)


    rdd = sc.textFile("/opt/spark/README.md")

    print(rdd.count())

如果我将其运行为 -

spark-submit ./test.py 

我得到了正确的结果。

95

我的问题是,为什么我不能直接运行它 -

./test.py 

因为我在我的 python 脚本中导入了 pyspark 和 SparkContext。

我得到错误 -

Traceback (most recent call last):
  File "./test.py", line 8, in <module>
    sc = SparkContext(conf = conf)
  File "/usr/local/lib/python2.7/site-packages/pyspark/context.py", line 118, in __init__
    conf, jsc, profiler_cls)
  File "/usr/local/lib/python2.7/site-packages/pyspark/context.py", line 188, in _do_init
    self._javaAccumulator = self._jvm.PythonAccumulatorV2(host, port)
TypeError: 'JavaPackage' object is not callable

根据我的谷歌搜索,我知道我错过了在某处添加一些罐子,但我认为我不明白这里到底发生了什么。如果有人能指点我有关如何设置 spark 变量和 CLASSPATH 的基本教程,我将不胜感激。

我已经阅读了这个问题,但它没有那么详细 -

What is the difference between spark-submit and pyspark?

谢谢。

【问题讨论】:

【参考方案1】:

让我们关注两条信息:

我已经安装了 Spark 1.6.0 和 Python 2.6.6

self._javaAccumulator = self._jvm.PythonAccumulatorV2(host, port)

这些部分表明您错误地配置了 Spark 安装:

您认为使用 Spark 1.6(这似乎是您路径中的 jar 版本)。 路径中的 Python 包使用 Spark 2.1.0 (SPARK-16861) 中引入的代码。

这很可能是错误设置 PYTHONPATH 或等效环境变量的结果。

【讨论】:

我想这正是我正在寻找的,如何配置 Spark 和 Python 环境变量。我正在关注的教程,请不要在步骤中提及。

以上是关于没有 spark-submit 的 Exec pyspark 独立脚本的主要内容,如果未能解决你的问题,请参考以下文章

spark-submitting 时没有名为 numpy 的模块

如何在包中只导入没有 exec __init__.py 的子模块

在 Yarn Cluster 上执行 Spark-Submit 时看不到 Yarn Job

spark-submit之使用pyspark

HDFS HA yarn 在 spark-submit 上的这个错误是啥

py 5.17