不能将 numpy 与 Spark 一起使用



我有一个Spark程序,在我的Windows机器上本地运行。我使用 numpy 进行一些计算,但我得到一个例外:

ModuleNotFoundError: 没有名为"numpy"的模块

我的代码:

import numpy as np
from scipy.spatial.distance import cosine
from pyspark.sql.functions import udf,array
from pyspark.sql import SparkSession
spark = SparkSession
.builder
.appName("Playground")
.config("spark.master", "local")
.getOrCreate()
@udf("float")
def myfunction(x):
y=np.array([1,3,9])
x=np.array(x)
return cosine(x,y)

df = spark
.createDataFrame([("doc_3",1,3,9), ("doc_1",9,6,0), ("doc_2",9,9,3) ])
.withColumnRenamed("_1","doc")
.withColumnRenamed("_2","word1")
.withColumnRenamed("_3","word2")
.withColumnRenamed("_4","word3")

df2=df.select("doc", array([c for c in df.columns if c not in {'doc'}]).alias("words"))
df2=df2.withColumn("cosine",myfunction("words"))
df2.show() # The exception is thrown here

但是,如果我运行一个仅包含以下内容的其他文件:

import numpy as np
x = np.array([1, 3, 9])

然后它工作正常。

编辑:

正如 pissall 在评论中建议的那样,我已经在 venv 上安装了 numpy 和 scipy。现在,如果我尝试使用 spark-submit 运行它,那么它落在第一行,如果我使用 python 运行它.exe那么我不断收到与以前相同的错误消息。

我像这样运行它:

spark-submit --master local sparkricky2.py --conf spark.pyspark.virtualenv.requirements=requir
ements.txt

要求.txt:

numpy==1.16.3
pyspark==2.3.4
scipy==1.2.1

但它在第一行失败了。

我对 venv 和 conda 都收到相同的错误。

看起来numpy安装在与Spark使用的运行时不同的运行时上。您可以通过设置环境变量PYSPARK_PYTHON来判断使用哪个运行时来激发 。

在 Spark 配置文件中,(conf/spark-env.sh 在 Spark 的安装 目录中。不确定Windows,但Spark发行版包含spark-env.sh.template - spark-env.cmd.template在Windows上我认为-。必须先将其重命名为 spark-env.sh (spark-env.cmd(。

PYSPARK_PYTHON=<path to your python runtime/executable>

您可以在文档中阅读有关环境变量的更多信息。

相关内容

最新更新