これは私の Hadoop の仕事です:
hadoop streaming \
-D mapred.map.tasks=1\
-D mapred.reduce.tasks=1\
-mapper "awk '{if(\$0<3)print}'" \ # doesn't work
-reducer "cat" \
-input "/user/***/input/" \
-output "/user/***/out/"
このジョブは常に失敗し、次のエラーが表示されます。
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `export TMPDIR='..../work/tmp'; /bin/awk { if ($0 < 3) print } '
しかし、-mapper
これを -mapper "awk '{print}'" に変更すると、エラーなしで動作します。の問題は何if(..)
ですか?
アップデート:
詳細な回答をありがとう@paxdiablo。
x
私が本当にやりたいことは、入力データをカスタムにパイプする前に、最初の列がより大きいデータを除外することですbin
。したがって、-mapper
実際には次のようになります。
-mapper "awk -v x=$x{if($0<x)print} | ./bin"
それを達成する他の方法はありますか?