1

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 スクリプトの他の種類のパラメーターにする方法は?

ありがとうございました!

4

3 に答える 3

4

解決策は本当に簡単です。使用する

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

それは私にとってはうまくいきます。

Python スクリプトは次のように変更する必要があります。

kFirstColumns= int(sys.argv[1])
于 2013-05-24T04:59:36.310 に答える
1

まあ、あなたはすでにそれをやっています。

sys.argv[1:]それを取得してメインに渡しますが、引数は使用しません。私が提案する(最も簡単なルート)は、スクリプトを次のように変更することです。

def main(kFirstColumns):
    ...

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

次に、次のようにスクリプトを実行します

$ python myScript.py 7

次に、より複雑なコマンド ライン オプションを実行する場合は、 argparseを参照できます。

于 2013-05-24T03:55:34.330 に答える
0

少しハックですが、クエリに追加の列として含めることでパラメーターを渡すことができます。

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)

それが役立つことを願っています。

于 2013-05-24T09:58:57.900 に答える