У меня есть программа 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 spark\ricky2.py --conf spark.pyspark.virtualenv.requirements=requir
ements.txt
needs.txt:
numpy==1.16.3
pyspark==2.3.4
scipy==1.2.1
Но это не сработает в первой строке.
Я получаю одинаковую ошибку как для venv, так и для conda.