2013-03-05 3 views
1

에 대한 매개 변수를 정의 내가 GAE의 맵리 듀스와 주변 하구와 하나 개의 질문이 있어요 : 맵리 듀스에서 특정 작업의 변수 만 변경하는GAE의 맵리 듀스 : 작업

이 가능를?

내가 부탁하고 그 이유는 다음과 같습니다

입력 CSV 내 맵리 듀스 작업의 출력 CSV이 같은 헤더 행이로되어있다 - 그러나 결코에서 그러나 헤더 행이 출력 CSV 어딘가에 상단. 오른쪽 머리글 행을 얻으려면 필자는 reduce 작업의 현재 반복을 검사하는 reduce 함수에 카운터를 삽입하고 0이면 파이프 라인에 하드 코딩 된 header-row를 전달합니다. 출력 csv가 blobstore에 저장되면 카운터가 재설정됩니다.

문제 : 카운터를 무작위로 다시 설정하는 경우가 많습니다. 아마도 함수 외부에서 전역 변수 "reduce_counter = 0"으로 정의해야했기 때문일 수 있습니다.

변수/매개 변수를 작업에 연결하는 방법이 있습니까? 아니면 header_row를 가져 오는 더 좋은 방법이 있습니까?

출력이 blobstore에 저장되고 blobstore 객체가 내가 아는 한 변경할 수 없기 때문에 DictReader 또는 csv 모듈에서 작업 할 수 있다고 생각하지 않습니다.

내 코드는 www.github.com/jvdheyden/ste에서 main.py 문서에 있습니다.

감사합니다.

답변

0

mapreduce 작업이 완료된 후에 헤더를 추가해야합니다. 당신은 작업이 완료된 후 출력 CSV에 액세스하여이 작업을 수행 할 수 있습니다 GAE 여러 파편에서 맵리 듀스 작업을 처리하기 때문에

orig_file = gcs.open(filename_from_mapreduce) 
new_file = gcs.open(filename_from_mapreduce + "_with_headers", "r") 

new_file.write("your,csv,headers,here") 
while True: 
    read = orig_file.read() 
    if read == '': 
     break 
    output.write(read) 

output.close() 
gcs.delete(orig_file) 

귀하의 문제가 발생합니다. 각각의 작은 태스크가 병렬로 실행된다는 것은 매우 유용합니다. 따라서 대용량의 데이터에서 엄청난 시간 이점을 얻을 수 있습니다.

여기에는 CSV 헤더가 무작위로 나타나는 이유와 각 샤드가 작업을 완료 할 때마다 출력된다는 점도 설명되어 있습니다. 따라서 출력의 첫 번째 행을 작성하는 것을 정확하게 예측할 수 없습니다.

관련 문제