PySpark 2.2 UDF (пользовательская функция) не работает в интерактивной оболочке - PullRequest
0 голосов
/ 20 июня 2019

PySpark 2.2 UDF (пользовательская функция) не работает в интерактивной оболочке

Я сделал прогнозы, используя обученный классификатор случайных лесов в pyspark 2.2, и у меня есть кадр данных с идентификатором клиента и столбцом вероятности, который является векторомиз двух значений, для вероятности 0 и 1 класса.Я провел много поисков, и единственный способ извлечь значения вероятности из вектора - использовать пользовательские функции (UDF).Моя конечная цель - извлечь второй элемент векторов в столбце вероятности.Я делаю это через интерактивную оболочку.

Я использовал ответ, приведенный в ссылке ниже, чтобы создать свой udf и получить значения из векторов в столбце вероятности.

Элемент доступавектора в кадре данных Spark (вектор вероятности логистической регрессии)

pred_df - это кадр данных с идентификатором клиента и столбцом вероятности с векторами.

pred_df = rfpredictions_all.select('cust_id','probability')
pred_df.show(10, False)

|cust_id         |probability                               |
+----------------+------------------------------------------+
|-499988999999354|[0.344300440937649,0.655699559062351]     |
|-499984999999844|[0.9999861414235123,1.3858576487785479E-5]|
|-499982999999468|[0.9999863031877703,1.36968122295972E-5]  |
|-499963999999604|[0.9673885836112887,0.03261141638871133]  |
|-499961999999624|[0.9995773601067997,4.226398932004604E-4] |
|-499955999999657|[0.3948082168680653,0.6051917831319348]   |
|-499941999999545|[0.22254333914997668,0.7774566608500233]  |
|-499940999999366|[0.28004123106727474,0.7199587689327253]  |
|-499921999999925|[0.2842185949678544,0.7157814050321456]   |
|-499915999999580|[0.2524942837199675,0.7475057162800324]   |

Здесь я фиксирую второй элемент вектора в столбце вероятности

prob_1=udf(lambda v:float(v[1]),FloatType())
prob_df = pred_df.select('cust_id',prob_1('probability').alias('prob_sigch'))
prob_df.show(10)

Ошибка возникает при запуске prob_df.show(10)

Ошибка следующая:

Py4JJavaError: Произошла ошибка при вызове o311.showString.: org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 48.0 не выполнено 4 раза, последний сбой: потерянное задание 0.3 на этапе 48.0 (TID 1966, anp-r06wn02.c03.hadoop.td.com, исполнитель 3): java.io.IOException: Невозможно запустить программу "/ usr / local / anaconda3 / bin / ipython": error = 2, нет такого файла или каталога

Следующая ссылка указывает что-то вроде строко том, что экземпляр UDF создается до запуска Spark, но для меня это не имеет смысла, так как моя программа sparksession работает по всей программе.

Функции из пользовательского модуля не работают в PySpark, но они работаютпри вводе в интерактивном режиме

Еще одна вещь, которую я хотел бы добавить, это то, что тот же самый код прекрасно работает в Jupyter Notebook, но выдает вышеуказанную ошибку в интерактивной оболочке или когда я пытаюсь запустить задание вне jupyter.

Заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...