[HADOOP] Hive에서 Python 스트리밍 스크립트에 매개 변수를 전달하는 방법은 무엇입니까?
HADOOPHive에서 Python 스트리밍 스크립트에 매개 변수를 전달하는 방법은 무엇입니까?
Hive 사용자는 스크립트를 통해 테이블을 스트리밍하여 해당 데이터를 변환 할 수 있습니다.
ADD FILE replace-nan-with-zeros.py;
SELECT
TRANSFORM (...)
USING 'python replace-nan-with-zeros.py'
AS (...)
FROM some_table;
간단한 Python 스크립트가 있습니다.
#!/usr/bin/env python
import sys
kFirstColumns= 7
def main(argv):
for line in sys.stdin:
line = line.strip();
inputs = line.split('\t')
# replace NaNs with zeros
outputs = [ ]
columnIndex = 1;
for value in inputs:
newValue = value
if columnIndex > kFirstColumns:
newValue = value.replace('NaN','0.0')
outputs.append(newValue)
columnIndex = columnIndex + 1
print '\t'.join(outputs)
if __name__ == "__main__":
main(sys.argv[1:])
kFirstColumns를이 Python 스크립트의 명령 줄 또는 다른 종류의 매개 변수로 만드는 방법은 무엇입니까?
고맙습니다!
해결법
-
==============================
1.해결책은 정말 사소합니다. 용도
해결책은 정말 사소합니다. 용도
ADD FILE replace-nan-with-zeros.py; SELECT TRANSFORM (...) USING 'python replace-nan-with-zeros.py 7' AS (...) FROM some_table;
그냥 대신
... USING 'python replace-nan-with-zeros.py' ...
그것은 나를 위해 잘 작동합니다.
파이썬 스크립트는 다음과 같이 변경되어야합니다 :
kFirstColumns= int(sys.argv[1])
-
==============================
2.글쎄, 당신은 이미 그렇게하고 있습니다.
글쎄, 당신은 이미 그렇게하고 있습니다.
sys.argv [1 :]을 잡아서 main으로 전달하지만 인수는 사용하지 않습니다. 가장 현명한 방법은 다음과 같이 스크립트를 변경하는 것입니다.
def main(kFirstColumns): ... if __name__ == "__main__": main(int(sys.argv[1]))
그런 다음 스크립트를 다음과 같이 실행하십시오.
$ python myScript.py 7
그런 다음 더 복잡한 명령 행 옵션을 원할 때 argparse를 볼 수 있습니다.
-
==============================
3.약간의 해킹이지만 매개 변수를 쿼리에 추가 열로 포함시켜 매개 변수를 전달할 수 있습니다.
약간의 해킹이지만 매개 변수를 쿼리에 추가 열로 포함시켜 매개 변수를 전달할 수 있습니다.
SELECT TRANSFORM (...) USING 'python replace-nan-with-zeros.py' AS (...) FROM (SELECT 7 AS kFirstColumns, * FROM some_table);
그런 다음 스크립트에서 행을 구문 분석 할 때 첫 번째 열 값이 찾고있는 매개 변수가됩니다. 간단히 지역 변수에 입력하여 열 값 목록에서 제거하십시오.
line = line.strip(); inputs = line.split('\t') kFirstColumns = inputs.pop(0)
희망이 도움이됩니다.
from https://stackoverflow.com/questions/16727401/how-to-pass-parameters-to-python-streaming-script-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 시퀀스 파일로 저장된 것을 사용하여 생성 된 하이브 테이블에 시퀀스 파일 데이터로드 실패 (0) | 2019.08.18 |
---|---|
[HADOOP] 하둡 2.2.0 빌드 Ant BuildException 오류 (0) | 2019.08.18 |
[HADOOP] Windows에 하둡 설치? (0) | 2019.08.18 |
[HADOOP] sqoop (1.4.5)을 사용하여 mysql 데이터를 hdfs (hadoop 2.4.1)로 가져 오기 (0) | 2019.08.18 |
[HADOOP] Windows 10에서 Hadoop 2.7.2 설치 중 오류 (0) | 2019.08.18 |