python - 没有 spark-submit 的 Exec pyspark 独立脚本
问题描述
我是在 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 的基本教程,我将不胜感激。
我已经读过这个问题,但它没有那么详细 -
谢谢你。
解决方案
让我们关注两条信息:
我已经安装了 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
或等效环境变量的结果。
推荐阅读
- firebase - 如何使用 Flutter 从带有`DOCUMENT ID`的firestore获取指定值
- bundle - 将 3 个以上的 OpenDaylight 控制器连接到 mininet 拓扑
- java - 需要帮助使用 StdDraw 绘制二维数组
- sql - 修剪尾随零
- r - 如何使用用户输入的数字作为变量?
- c++ - 无法为自定义矢量类绑定 ostream 1value - C++
- javascript - 如何从 Angular 或任何其他网络平台获取 Firebase 安全数据
- java - 启动 Spring Boot Web 应用程序时出现 BeanCreationException
- c - 使用 readdir 在 for 循环中并行递归
- python - RuntimeError: stack 期望每个张量大小相等,但在条目 0 处得到 [32, 1],在条目 1 处得到 [32, 0]