2017-11-06 6 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 빈 더미 파일입니다
python myfile.py text.txt --database=mydb.db 

물품.

id1, 1 
id2, 1 

을하지만 지금은 아무런 출력이 없습니다 :

나는 출력이 될 것으로 기대하고있다. 내가 뭘 놓치고 있니?

답변

0

나중에 누군가가 필요로 할 때를 대비하여 해결책을 찾았습니다. 이 예제에서 데이터베이스 경로는 명령 줄에서 옵션으로 제공됩니다. 당신이 더미 텍스트 파일을 추가 할 때 매퍼에가 많은 행을 여러 번 실행하기 때문에

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

, 그것은 단지 하나 개의 행을 포함해야 : 명령 줄에서 실행

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 

텍스트 파일