2017-02-21 8 views
0

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パッケージを動作させることができますか?

お知らせください。

答えて

0

私の推測では、PYSPARK_PYTHONという環境変数があなたのanacondaパスを指すようにする必要があります。

デフォルトでは、Sparkはパスで見つかった最初のpython実行可能ファイルを探します。通常、これはPythonのシステムインストール(例:/usr/bin/python)です。 pacparkがあなたのanacondaディストリビューションがインストールされている場所を知るには、PYSPARK_PYTHON変数を設定する必要があります。たとえば、Pythonスクリプトを実行する前にexport PYSPARK_PYTHON=/path/to/anaconda/bin/pythonを実行するか、pysparkを実行します。

+0

詳細を少し説明できますか?私はそれを確信していません。私はアナコンダにライブラリをインストールしています。しかし、私がSpark on Yarnでそれを使用すると、そのライブラリはエグゼクティブに利用できるとは思われません。では、エグゼキュータとRDDブロックで動作するように、どのように利用できるようにするのですか?私はそれが "No module bs4"と言うことになっていると思います。 – Baktaawar

+0

@Baktaawar更新された回答を参照してください – santon

+0

Well PysparkはAnaconda pythonのみを使用しています。 Pysparkシェルはそれを使って、私はそれを見ることができます。私のbashプロファイルにもその設定があります – Baktaawar

関連する問題