NLTKやBeautifulSoupのような特定のタスクにPythonライブラリを使用したいのであれば、私のローカルマシンでSparkを使っても同じことができますが、同じことはできませんYARNのSparkで作業してください。ここで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タグをクリーンアップします。私はYARNにスパークでそれを実行したときしかし、それは次のように動作し、言いません。
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)
すべてのこれらのパッケージは、クラスタにインストール私のアナコンダにインストールされています。しかし、私は問題は、このパッケージはエグゼキュータで利用できないということかもしれないと思います。私の勘違い。
YARNのSparkでどのようにPythonパッケージを動作させることができますか?
お知らせください。
詳細を少し説明できますか?私はそれを確信していません。私はアナコンダにライブラリをインストールしています。しかし、私がSpark on Yarnでそれを使用すると、そのライブラリはエグゼクティブに利用できるとは思われません。では、エグゼキュータとRDDブロックで動作するように、どのように利用できるようにするのですか?私はそれが "No module bs4"と言うことになっていると思います。 – Baktaawar
@Baktaawar更新された回答を参照してください – santon
Well PysparkはAnaconda pythonのみを使用しています。 Pysparkシェルはそれを使って、私はそれを見ることができます。私のbashプロファイルにもその設定があります – Baktaawar