【发布时间】:2016-12-13 11:12:12
【问题描述】:
我编写了一个简单的 Flask 应用程序来将一些数据传递给 Spark。该脚本在 IPython Notebook 中有效,但当我尝试在它自己的服务器中运行它时无效。我不认为 Spark 上下文在脚本中运行。如何让 Spark 在以下示例中工作?
from flask import Flask, request
from pyspark import SparkConf, SparkContext
app = Flask(__name__)
conf = SparkConf()
conf.setMaster("local")
conf.setAppName("SparkContext1")
conf.set("spark.executor.memory", "1g")
sc = SparkContext(conf=conf)
@app.route('/accessFunction', methods=['POST'])
def toyFunction():
posted_data = sc.parallelize([request.get_data()])
return str(posted_data.collect()[0])
if __name__ == '__main_':
app.run(port=8080)
在 IPython Notebook 中,我没有定义 SparkContext,因为它是自动配置的。我不记得我是怎么做到的,我关注了一些博客。
在 Linux 服务器上,我已将 .py 设置为始终运行并按照this guide 的第 5 步安装最新的 Spark。
编辑:
按照大卫主义的建议,我现在转而使用复杂度越来越高的简单程序来定位错误。
首先,我仅使用以下答案中的脚本创建了 .py(在适当调整链接之后):
import sys
try:
sys.path.append("your/spark/home/python")
from pyspark import context
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
这将返回“成功导入 Spark 模块”。但是,我制作的下一个 .py 文件返回异常:
from pyspark import SparkContext
sc = SparkContext('local')
rdd = sc.parallelize([0])
print rdd.count()
这会返回异常:
“Java 网关进程在向驱动程序发送其端口号之前退出”
四处寻找类似的问题,我发现了this page,但是当我运行此代码时,没有任何反应,控制台上没有打印,也没有错误消息。同样,this 也没有帮助,我得到了与上面相同的 Java 网关异常。我还安装了 anaconda,因为我听说这可能有助于统一 python 和 java,再次没有成功......
对接下来要尝试什么有什么建议吗?我很茫然。
【问题讨论】:
-
请注意,我在 iPython Notebook 上使用 Firefox 上的 restclient 扩展在我的机器上发布,它按预期工作
标签: python flask apache-spark pyspark