私は次のことをしようとしています。複数の日付があり、不明な数の入力日付を取得し、入力引数に対して豚スクリプトを実行する豚スクリプトを作成したいと考えています。私の質問は:
不明な数の入力変数を pig スクリプトに送信し、それらを pig スクリプト内で処理するにはどうすればよいですか?
ありがとうサラ
私は次のことをしようとしています。複数の日付があり、不明な数の入力日付を取得し、入力引数に対して豚スクリプトを実行する豚スクリプトを作成したいと考えています。私の質問は:
不明な数の入力変数を pig スクリプトに送信し、それらを pig スクリプト内で処理するにはどうすればよいですか?
ありがとうサラ
あなたが実際に何をしたいのか理解に苦しむ。それが私の解決策です>あなたの問題に対して、不明な数の日付を送信します(chararrayとしてソートされます):
A = load 'input_dates' AS (date:chararray); B = my_macro(A);
それは非常に基本的なものなので、あなたの問題を正しく理解していなかったと思います。あなたの問題をもう少し発展させていただけませんか?
更新>> Pig 0.11 を使用している場合、次のようなものはどうでしょうか(モジュールのインポートには 0.10 までバグがあります):
#!/usr/bin/python
import os
from org.apache.pig.scripting import *
P = Pig.compile("""
data = LOAD '$docs_in' AS (a:int);
-- do something
""")
lof = os.listdir("/home/.../dates/")
params = []
for elem in lof:
params.append({'docs_in': str(elem)})
lof.remove(elem)
bound = P.bind(list_of_files)
stats = bound.run(params)
各実行が前の結果に依存している場合は、runSingle()
代わりに使用します。
質問が正しく理解できれば、ファイルまたはディレクトリの数をロードする必要があります。入力として「,」を指定できます。以下に例を示します。
load.pig (コンテンツ):
A = LOAD '$input' using PigStorage();
dump A;
実行するコマンド (ローカルで実行する):
pig -x local -param input=20120301,20120302,20120304 load.pig