복붙노트

[HADOOP] Hive에서 Python 스트리밍 스크립트에 매개 변수를 전달하는 방법은 무엇입니까?

HADOOP

Hive에서 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. ==============================

    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. ==============================

    2.글쎄, 당신은 이미 그렇게하고 있습니다.

    글쎄, 당신은 이미 그렇게하고 있습니다.

    sys.argv [1 :]을 잡아서 main으로 전달하지만 인수는 사용하지 않습니다. 가장 현명한 방법은 다음과 같이 스크립트를 변경하는 것입니다.

    def main(kFirstColumns):
        ...
    
    if __name__ == "__main__":
        main(int(sys.argv[1]))
    

    그런 다음 스크립트를 다음과 같이 실행하십시오.

    $ python myScript.py 7
    

    그런 다음 더 복잡한 명령 행 옵션을 원할 때 argparse를 볼 수 있습니다.

  3. ==============================

    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)
    

    희망이 도움이됩니다.

  4. from https://stackoverflow.com/questions/16727401/how-to-pass-parameters-to-python-streaming-script-in-hive by cc-by-sa and MIT license