2017-11-06 14 views
0

MRJobの仕組みがわかりません。私は、SQLクエリを作成し、その行を生成しようとしている、とドキュメントでは、そのようなことは詳細に説明されていません。MRJobでSQLクエリから行を処理する方法

これまでの私のコード:

# To be able to give db file as option. 
def configure_options(self): 
    super(MyClassName, self).configure_options() 
    self.add_file_option('--database') 

def mapper_init(self): 
    # Making sqlite3 database available to mapper. 
    self.sqlite_conn = sqlite3.connect(self.options.database) 
    self.command= ''' 
     SELECT id 
     FROM names 
     ''' 

def mapper(self,_,val):   
    yield self.sqlite_conn.execute(self.command), 1 

とコンソールで、私はTEXT.TXTスクリプトがSTDの入力を要求しませんので、空のダミーファイルです

python myfile.py text.txt --database=mydb.db 

を書きます。

私はあることを、出力を期待しています:

id1, 1 
id2, 1 

しかし、今は出力されません。私は何が欠けていますか?

答えて

0

解決策が見つかったので、誰かが後でそれを必要とする場合があります。この例では、データベースパスはコマンドラインでオプションとして指定されています。

コマンドラインから実行する
def configure_options(self): 
    super(MyClassName, self).configure_options() 
    self.add_file_option('--database') 

def mapper_init(self): 
    # make sqlite3 database available to mapper 
    self.sqlite_conn = sqlite3.connect(self.options.database) 
    self.command = ''' 
     SELECT id 
     FROM table 
     ''' 

def mapper(self,_,val):   
    queryResult = self.sqlite_conn.execute(self.command) 
    while 1: 
     row = queryResult.fetchone() 
     if row == None: 
      break 
     yield row[0], 1 

:あなたはダミーテキストファイルを追加するときマッパーは多くの行と同じ数回実行されますから、それは、1行のみ含まれている必要があることを

python myfilename.py dummy.txt --database=mydatabase.db 

ノートにありますテキストファイル。