pandas - 为什么我的应用程序不能以 pandas_udf 和 PySpark+Flask 启动?

标签 pandas flask pyspark

当我的 Flask+PySpark 应用程序具有带有 @udf 或 @pandas_udf 注释的函数时,它不会启动。如果我简单地删除注释,它就会开始。 如果我尝试使用 Flask 启动我的应用程序,则会执行脚本的第一遍词法解释。例如,调试器在导入行处停止,例如 从 pyspark.sql.functions 导入 pandas_udf、udf、PandasUDFType .但是根本没有执行任何语句,包括初始的 app = Flask(name) 语句。 (会不会是某种隐藏的异常?) 如果我在没有 Flask 的情况下启动我的应用程序,使用完全相同的功能和相同的导入,它确实可以工作。

这些是导入:

from pyspark.sql import SQLContext
from pyspark.sql import SparkSession
from pyspark.sql.functions import pandas_udf, udf, PandasUDFType
import pandas as pd

这是函数:

@pandas_udf('string', PandasUDFType.SCALAR)
def pandas_not_null(s):
    return s.fillna("_NO_NA_").replace('', '_NO_E_')

如果 @pandas_udf 存在,这是不执行的语句:

app = Flask(__name__)

这就是 IntelliJ 启动 Flask 的方式:

FLASK_APP = app
FLASK_ENV = development
FLASK_DEBUG = 1
In folder /Users/vivaomengao/projects/dive-platform/cat-intel/divecatintel

/Users/vivaomengao/anaconda/bin/python /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py --module --multiproc --qt-support=auto --client 127.0.0.1 --port 56486 --file flask run

我在自己的电脑上运行 MacOS。

最佳答案

我发现了问题。问题是 @pandas_udf 注释在加载模块时需要一个 Spark session (Python 中的某种“第一遍解析”)。为了解决这个问题,我首先调用了创建 Spark session 的代码。然后我导入了具有@pandas_udf 注释功能的模块。我将其直接导入到调用函数中,而不是在 header 中。 为了排除故障,我在 @pandas_udf 函数(在 PyCharm 中)上设置了一个断点并进入函数。这样我就可以检查局部变量了。其中一个变量指的是“sc”或“_jvm”之类的东西。我从过去的一个问题中了解到,如果 Spark session 未初始化,就会发生这种情况。

关于pandas - 为什么我的应用程序不能以 pandas_udf 和 PySpark+Flask 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53299871/

相关文章:

python - 有没有办法将先前计算的行值与 Pandas Dataframe 中不同列的总和一起使用?

python - Pandas 数据框中单元格中的条件更改值

python - 将时间戳字符串转换为日期时间格式

pyspark - Athena 仅更新特定分区 : MSCK REPAIR TABLE

python - Pyspark 数据帧 : Transforming unique elements in rows to columns

python - 通过迭代指定的数据帧值来创建新目录 Python Pandas Numpy

javascript - Flask 和 pdf 查看器 (pdf.js)

python - flask-sqlalchemy 列的最大值

python - 属性错误: 'RequestContext' object has no attribute 'user'

python - 如何修改/转换数据框的列?