Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Flask Web App访问Spark和/或PySpark_Python_Apache Spark_Flask_Web Applications_Pyspark - Fatal编程技术网

Python 从Flask Web App访问Spark和/或PySpark

Python 从Flask Web App访问Spark和/或PySpark,python,apache-spark,flask,web-applications,pyspark,Python,Apache Spark,Flask,Web Applications,Pyspark,我在/home/ubuntu/Spark-2.2.1-bin-hadoop2.7' 我在/home/ubuntu/flaskapp 我还安装了一个jupyter笔记本。我还安装了一个模块名findspark,以便于查找Spark安装 在Jupyter笔记本中,它可以按预期工作。如果我跳进去打字 import pyspark 它抛出一个错误,即没有名为pyspark的模块。这是意料之中的。所以我必须使用findspark。因此,如果我这样做,它只会像预期的那样起作用: import findspa

我在
/home/ubuntu/Spark-2.2.1-bin-hadoop2.7'

我在
/home/ubuntu/flaskapp

我还安装了一个jupyter笔记本。我还安装了一个模块名
findspark
,以便于查找Spark安装

在Jupyter笔记本中,它可以按预期工作。如果我跳进去打字
import pyspark
它抛出一个错误,即没有名为
pyspark
的模块。这是意料之中的。所以我必须使用findspark。因此,如果我这样做,它只会像预期的那样起作用:

import findspark
findspark.init('home/ubuntu/spark-2.2.1-bin-hadoop2.7')
import pyspark
然而,对于flaskapp,它不起作用。如果我只是做Hello World的基本文件,它工作得很好,我可以从它指定的URL看到网页。所以这很好:

from flask import Flask

@app = Flask(__name__)
def hello():
    return "Hello World"

if __name__ == '__main__':
    app.run()
但是,如果我试图通过
findspark
使用
pyspark
(我在全球安装了pip),它将不起作用。该网页显示一个
500内部服务器错误
。因此,这里的简单代码不起作用:

import findspark
findspark.init('/home/ubuntu/spark-2.2.1-bin-hadoop2.7')

import pyspark
from pyspark import SparkContext

from flask import Flask
app = Flask(__name__)

sc = SparkContext()
data = range(0,100)
rdd = sc.parallelize(data)
a = rdd.take(2)


@app.route('/')
def hello_world():
    return "List items are {} and {}".format(a[0], a[1])

if __name__ == '__main__':
    app.run()
因此,我的问题是:

1) 为什么它不起作用

2) 让脚本连接到
pyspark
的最简单方法是什么

编辑

调试器输出:

ubuntu@ip-172-31-11-55:~/flaskapp$ FLASK_DEBUG=1 flask run
 * Serving Flask app "flaskapp"
 * Forcing debug mode on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 156-406-059
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
18/01/17 19:40:35 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/01/17 19:40:36 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/01/17 19:40:37 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
18/01/17 19:40:38 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
18/01/17 19:40:38 WARN Utils: Service 'SparkUI' could not bind on port 4041. Attempting port 4042.

我刚刚参与了一个项目,该项目在与Flask web服务器相同的服务器上运行本地Spark群集。我遇到了与你完全相同的错误,但记不清问题是什么

很确定这与初始化时缺少提供给SparkContext的参数有关。需要提供SparkConf对象或主url上的显式详细信息等

以下是python 2.7中的函数,在服务器上可用的尽可能多的内核上运行本地spark群集。让我知道这是否运行,或者是否有其他错误

from pyspark import SparkContext

_sc = SparkContext('local[*]', 'nameOfYourSparkContext')
_data = range(0,100)
_rdd = _sc.parallelize(data)
"""Perform your operations on _rdd such as .map(), .collect()
"""
_sc.close()

是否启用Flask调试器并检查错误?一般来说,在web应用程序中嵌入SparkContext是一个非常糟糕的主意。@user6910411我该如何使用调试器?现在,我不必运行
flaskrun
pythonflaskapp.py
。我将文件夹符号链接到我的
/var/www/html
so,然后对
apache.conf
进行了一些更改。基本上,我按照这些说明创建了flask应用程序,因此我不必运行py文件。不管怎样,我确实试着按照你的要求运行,使用
FLASK\u DEBUG=1 FLASK run
,所有的输出都在这个要点中。无法在端口上绑定-请确保端口可访问或手动设置自由端口(
spark.ui.port
),然后查看它是否解决了问题。此处为哑问题。。。我该怎么做?可以建议从Spark 101开始吗?:)例如,编辑
SPARK\u HOME/conf/SPARK defaults.conf
。但首先检查端口是否已被占用。使用
netcat
或类似工具。