Не может использовать NumPy с Spark - PullRequest
3 голосов
/ 04 октября 2019

У меня есть программа 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.

1 Ответ

3 голосов
/ 10 октября 2019

Похоже, что numpy установлен в другое время выполнения, чем то, которое используется Spark. Вы можете указать, какое время выполнения использовать для запуска, установив переменную окружения PYSPARK_PYTHON.

В файле конфигурации spark (conf / spark-env.sh в установочном каталоге spark. Не уверен насчет окон, но распределение sparkсодержит spark-env.sh.template - spark-env.cmd.template в Windows, я думаю ... Сначала его нужно переименовать в spark-env.sh (spark-env.cmd).)

PYSPARK_PYTHON=<path to your python runtime/executable>

Подробнее о переменных среды вы можете прочитать в документах .

...