0

Hive で map 句を使用しようとしていますが、構文につまずいており、ユース ケースの例があまり見つかりません。以前、外部スクリプトを使用してテーブルの列の 1 つを処理する必要があったときに map 句を使用しました。

たとえば、という名前の python スクリプトがありました。これは、run1 つのコマンド ライン パラメータを取り、スペースで区切られた 3 つの値を吐き出します。だから私はちょうどやった:

FROM(MAP
        tablename.columnName
     USING
        'run' AS
        result1, result2, result3
     FROM
        tablename
    ) map_output
    INSERT OVERWRITE TABLE results SELECT *;

今、私はより多くのパラメータを受け取り、うまくいかず、これに関する例を見つけることができなかったいくつかのことを試したpythonスクリプトを持っています. 私は明らかなことをしました:

FROM
    (MAP
        numAgents, alpha, beta, burnin, nsteps, thin
     USING
        'runAuthorityMCMC' AS numAgents, alpha, beta, energy, avgDegree, maxDegree, accept
     FROM
        parameters
    ) map_output
INSERT OVERWRITE TABLE results SELECT *;

しかし、エラーが発生しましA user-supplied transfrom script has exited with error code 2 instead of 0.た を実行するrunAuthorityMCMCと、そのテーブルからサンプリングされた 6 つのコマンド ライン パラメーターを使用して、完全に正常に動作します。

パラメータをまったく渡さずにスクリプトを実行しようとしているようです。エラー メッセージの 1 つで、このような場合に期待したとおりの出力が得られました。私がやろうとしていることをするための正しい構文は何ですか?

編集:

確認中 - これはエラー メッセージの一部です。

usage: runAuthorityMCMC [-h]
                        numAgents normalizedBrainCapacity ecologicalPressure
                        burnInSteps monteCarloSteps thiningRatio
runAuthorityMCMC: error: too few arguments

これは、引数が少なすぎる場合に期待する出力です。スクリプトは 6 つの引数を取る必要があります。

4

1 に答える 1

1

わかりました、おそらくここには語彙の違いがありますが、ハイブは値を「引数」としてスクリプトに送信しません。それらは標準入力を介して読み込まれます (これは、何かを引数として渡すのとは異なります)。また、データを送信してみて、/bin/cat実際に何がハイブに送信されているかを確認することもできます。私の記憶が正しければ、値はタブ区切りで送信され、スクリプトから出力される結果もタブ区切りであることが期待されます。

スクリプトで stdout (または stderr) から出力しようとすると、jobtracker ログに結果が表示されます。それはデバッグに役立ちます。

于 2012-12-30T01:17:41.237 に答える