如何将PySpark作为Python脚本运行?运行日志问题求助
正确运行PySpark Python脚本的解决方案
我来帮你一步步梳理问题,搞定这个PySpark+Flask脚本的运行:
先修正代码里的两个致命小问题
你的代码里有两处很容易忽略的错误,直接导致脚本跑不起来:
- 笔误问题:
if __name__ == '__main_':这里少了一个下划线,必须写成if __name__ == '__main__':,这是Python脚本入口的标准写法 - 端口冲突:Flask设的8080端口正好是Spark Web UI的默认端口,两个服务会抢端口,建议改成5000、8081这类没被占用的端口
修正后的完整代码:
import findspark # 如果findspark没自动找到Spark路径,可以手动指定 findspark.init("D:/opt/spark/spark-2.2.0-bin-hadoop2.7") from pyspark import SparkContext sc = SparkContext('local', appName='FlaskPySparkDemo') # 给Spark任务起个名字,方便日志识别 from flask import Flask, request app = Flask(__name__) @app.route('/', methods=['POST']) def toyFunction(): return 'HELLO WORLD' if __name__ == '__main__': # 修复下划线笔误 app.run(port=5000) # 修改端口避免冲突
正确的运行步骤
- 打开命令提示符,切换到你的脚本
app.py所在的目录 - 直接执行命令:
python app.py
关于日志输出的说明
你看到的Using Spark's default log4j profile: org/apache/spark/log4j-def...是正常的Spark初始化日志,说明PySpark已经成功加载了,不是错误哦!如果觉得日志太啰嗦,可以去Spark安装目录的conf文件夹里,修改log4j.properties文件,把日志级别调低(比如从INFO改成WARN)。
额外小建议(Spark 2.0+版本适用)
在Spark 2.0及以上版本,官方更推荐使用SparkSession作为统一的入口,比单独用SparkContext更灵活,读写DataFrame也更方便,替换后的代码片段:
import findspark findspark.init("D:/opt/spark/spark-2.2.0-bin-hadoop2.7") from pyspark.sql import SparkSession # 初始化SparkSession,同时也会创建SparkContext spark = SparkSession.builder.master("local").appName("FlaskPySparkDemo").getOrCreate() sc = spark.sparkContext # 如果你还需要用到SparkContext的话
这样调整后,你的脚本就能正常运行了,用POST请求访问http://localhost:5000就能收到返回的HELLO WORLD啦。
内容的提问来源于stack exchange,提问作者Reub
相关产品推荐
相关产品推荐

