执行 pyspark 独立脚本,无需 spark-submit



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

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

但是,我希望能够创建一个独立的 Python 脚本并实现相同的结果,但出现错误。

我的 python 代码在test.py-

#!/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

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

我已经读过这个问题,但它没有那么详细——

spark-submit和pyspark有什么区别?

谢谢。

让我们关注两条信息:

  • 我已经安装了Spark版本1.6.0和Python 2.6.6

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

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

  • 相信使用Spark 1.6(这似乎是你路径中的jars版本(。
  • 路径中的 Python 包使用 Spark 2.1.0 (SPARK-16861( 中引入的代码。

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

最新更新