Если я хочу использовать библиотеку python для конкретной задачи, например NLTK или BeautifulSoup, я могу это сделать, когда я использую Spark на моей локальной машине, но то же самое не делает работайте с Spark на YARN.Как сделать работу библиотеки Python на Spark YARN
Вот пример кода:
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
def html_parsing(x):
""" Cleans the text from Data Frame text column"""
textcleaned=''
#if row['desc'] is not None:
souptext=BeautifulSoup(x)
#souptext=BeautifulSoup(text)
p_tags=souptext.find_all('p')
for p in p_tags:
if p.string:
textcleaned+=p.string
#print textcleaned
#ret_list= (int(row['id']),row['title'],textcleaned)
return textcleaned
parse_html=udf(html_parsing,StringType())
sdf_cleaned=sdf_rss.dropna(subset=['desc']).withColumn('text_cleaned',parse_html('desc'))\
.select('id','title','text_cleaned')
sdf_cleaned.cache().take(3)
Этот код работает на моем локальном Спарк и убирает теги HTML. Однако, когда я запускаю его на Спарк на ПРЯЖИ, он не работает, и говорит следующее:
File "/var/storage/nm-sdl1/nm-local/usercache/appcache/application_1485803993783_0664/container_1485803993783_0664_01_000002/pyspark.zip/pyspark/serializers.py", line 422, in loads
return pickle.loads(obj)
ImportError: No module named bs4
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$doExecute$1.apply(BatchEvalPythonExec.scala:124)
Все эти пакеты установлены на моем Anaconda установлен на кластере. Однако я думаю, проблема может заключаться в том, что этот пакет недоступен для исполнителей. Моя догадка.
Любая идея, как мы можем сделать любой пакет python на Spark на YARN?
Просьба сообщить.
Не могли бы вы немного подробнее рассказать? Я не уверен, что получил это. У меня установлена библиотека в анаконде. Но если я использую это в Spark on Yarn, я не думаю, что библиотека доступна исполнителям. Итак, как я могу сделать это доступным, чтобы он мог работать на исполнителях и на блоке RDD? Я думаю, это то, что заставило его сказать «Нет модуля bs4» – Baktaawar
@Baktaawar см. Обновленный ответ – santon
Ну Pyspark использует только Anaconda python. Оболочка Pyspark использует это, и я это вижу. Его набор в моем профиле bash тоже – Baktaawar