[HADOOP] 파이썬을 사용하여 하이브 쿼리 출력에서 인쇄 빈 줄을 제거
HADOOP파이썬을 사용하여 하이브 쿼리 출력에서 인쇄 빈 줄을 제거
난 하이브 쿼리를 수행하여 로컬 FS에서 TSV 파일의 출력을 저장하고있다. 나는 하이브 쿼리에 대한 루프를 실행하고 다른 매개 변수를 전달하고있다. 하이브 쿼리가 루프에 대해 한 번 더 출력을 반환하지 않으면 그것은 TSV 파일에 빈 줄을 인쇄합니다. 이 NULL 값이 백엔드 내 DB에 푸시됩니다. for 루프는 실행 파일이 생성 된 후 따라서, - 내가 인쇄 된 모든 빈 줄을 제거하는 아래의 코드를 가지고 있지만, 그것은 작동하지 않습니다.
어떻게하면이 파일에서 빈 줄을 제거 할 수 있습니까?
` 395.9 429.61 PT
`
암호:
with open('file.tsv','r+w') as file:
for line in file:
if line.strip():
file.write(line)
감사
해결법
-
==============================
1.보통은 입력 파일을 열고 두 번째 파일에 비어 있지 않은 라인을 작성합니다 :
보통은 입력 파일을 열고 두 번째 파일에 비어 있지 않은 라인을 작성합니다 :
with open('file.tsv') as infile, open('filtered_file.tsv', 'w') as outfile: for line in infile: if line.strip(): outfile.write(line)
당신은 당신이 올바른 위치 옵션을 사용하여 파일 입력을 사용할 수있는 위치에 파일을 필터링하려면 :
import fileinput for line in fileinput.FileInput("infile", inplace=1): if line.strip(): print line
그러나,이 중간 파일을 사용하고 디스크 공간 부족 상황에서 작동하지 않을 수 있습니다.
당신이 뭔가를 시도 할 수있는 추가 디스크 공간을 할당하지 않고 파일의 올바른 위치를 필터링하려면 :
with open('file.tsv', 'r+') as infile: read_pos = write_pos = 0 line = infile.readline() while line: read_pos += len(line) if line.strip(): infile.seek(write_pos) infile.write(line) write_pos += len(line) infile.seek(read_pos) line = infile.readline() # update file size to the new, possibly reduced, size infile.truncate(write_pos)
from https://stackoverflow.com/questions/24196181/remove-empty-line-printed-from-hive-query-output-using-python by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HBase를 필터 (0) | 2019.10.22 |
---|---|
[HADOOP] 왜 이런 예는 NaN의 결과는 무엇입니까? (0) | 2019.10.22 |
[HADOOP] 구문은 데이터베이스에 100 개 테이블에서 수입 5 Sqoop을합니다 - 키워드를 제외 사용하지 않는? (0) | 2019.10.22 |
[HADOOP] 하둡 소스 이클립스를 구성 다운로드 (0) | 2019.10.22 |
[HADOOP] K는 클러스터링 조련사를 의미 (0) | 2019.10.22 |