exec pyspark独立脚本没有spark-submit

时间:2018-06-03 03:51:01

标签: python apache-spark pyspark spark-submit

我是新手在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?

谢谢。

2 个答案:

答案 0 :(得分:0)

让我们关注两条信息:

  •   

    我已安装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或等效环境变量的结果。

答案 1 :(得分:0)

user8371915-你指出了我正确的方向,这是PYTHONPATH根本没有设置的问题。

我发现此链接涵盖了我需要的所有信息,并且能够让我的代码只运行 -

./test.py

95

http://efimeres.com/2016/03/setup-spark-standalone/