2017-08-14 11 views
2

私はノートブックa.pynbを持っています。これには、寄せ木張りのファイルの読み込み文の機能があります。別のノートブックで「sqlContext」をモジュール(Pyspark)として使用する際の使い方

私は別のノートブックb.pynbでa.pynbを使用しています。この新しいノートブックでは、このparquetファイルを読み込んでsqltableを作成するためにa.pynbの関数を呼び出しています。しかし、常に失敗する

 Error: global name sqlContext is not defined, 

両方のノートブックで定義されている場合。

正確なコード:私はこの機能を使用していたb.pynbで

sc = SparkContext.getOrCreate() 
    sqlContext = SQLContext(sc) 

    def parquet_read(file_name): 
     df = sqlContext.read.parquet(file_name+"*.parquet") 
     return df 

a.pynb(Utilsのは)

import nbimporter 
    import a as commonUtils 
    reload(commonUtils) 
    sc = SparkContext.getOrCreate() 
    sqlContext = SQLContext(sc) 

    df2 = commonUtils.parquet_read("abc") 

それは常に

Error: global name sqlContext is not defined, 
で失敗します

定義されている場合両方のノートブックで。

答えて

1

あなたがフォローしている(つまり、ノートブックをモジュールとしてインポートする)アプローチは非常に躊躇しています。ユーティリティーコードを.pyファイルに移動し、ノートブックをモジュールとしてインポートするのに魔法を使用しようとしていない方がはるかに優れていると思います。

documentationに基づいて、あなたには、いくつかの魔法を見落として表示されます。

ここで我々は唯一あなたが定義するようにそれはあなたのコードサンプルから見える

関数やクラスを定義するいずれかのコードを実行しますsqlContextはモジュールレベルの変数であり、クラスや関数ではありません。

1つの方法は、コードを次のように再編成することです。さらに良いことに、このコードを.pyファイルに移動することだと思います。

def parquet_read(file_name): 
    sc = SparkContext.getOrCreate() 
    sqlContext = SQLContext(sc) 
    df = sqlContext.read.parquet(file_name+"*.parquet") 
    return df 
関連する問題