将 JSON 参数作为字符串传递给 python hadoop 流应用程序
passing JSON argument as a string to python hadoop streaming application
我想将 JSON 字符串作为命令行参数传递给我的 reducer.py 文件,但我无法这样做。
我执行的命令是:
hadoop jar contrib/streaming/hadoop-streaming.jar -file /home/hadoop/mapper.py -mapper 'mapper.py' -file /home/hadoop/reducer.py -reducer 'reducer.py {"abc":"123"}' -input /user/abc.txt -output /user/output/
当我在 reducer.py 中打印 argv 数组时,它显示输出为:
['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0057/container_1423459215008_0057_01_000004/./reducer.py', '{', 'abc', ':', '123', '}']
第一个参数是 reducer.py 的路径,但我的第二个参数被双引号分隔。
我想将第二个参数作为完整的 JSON 字符串实现。例如:['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0057/container_1423459215008_0057_01_000004/./reducer.py','{"abc":"123"}']
这样我就可以在 reducer.py
中将该参数加载为 Json
感谢任何帮助。谢谢!
编辑:
尝试使用命令转义 JSON:
hadoop jar contrib/streaming/hadoop-streaming.jar -file /home/hadoop/mapper.py -mapper 'mapper.py' -file /home/hadoop/reducer.py -reducer 'reducer.py "{\"abc\":\"123\"}"' -input /user/abc.txt -output /user/output/
输出为:
['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0058/container_1423459215008_0058_01_000004/./redu.py', '{\', 'abc\', ':\', '123\', '}']
您需要将 json 放在双引号内并进行适当的转义:"{\"abc\":\"123\"}"
但您的输入很可能会在传递给脚本之前经过 Hadoop 处理。
如果这不起作用,您可以尝试使用 -cmdenv name=value
通过环境传递参数。有关详细信息,请参阅 How do I pass a parameter to a python Hadoop streaming job?。
我想将 JSON 字符串作为命令行参数传递给我的 reducer.py 文件,但我无法这样做。
我执行的命令是:
hadoop jar contrib/streaming/hadoop-streaming.jar -file /home/hadoop/mapper.py -mapper 'mapper.py' -file /home/hadoop/reducer.py -reducer 'reducer.py {"abc":"123"}' -input /user/abc.txt -output /user/output/
当我在 reducer.py 中打印 argv 数组时,它显示输出为:
['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0057/container_1423459215008_0057_01_000004/./reducer.py', '{', 'abc', ':', '123', '}']
第一个参数是 reducer.py 的路径,但我的第二个参数被双引号分隔。
我想将第二个参数作为完整的 JSON 字符串实现。例如:['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0057/container_1423459215008_0057_01_000004/./reducer.py','{"abc":"123"}']
这样我就可以在 reducer.py
中将该参数加载为 Json感谢任何帮助。谢谢!
编辑: 尝试使用命令转义 JSON:
hadoop jar contrib/streaming/hadoop-streaming.jar -file /home/hadoop/mapper.py -mapper 'mapper.py' -file /home/hadoop/reducer.py -reducer 'reducer.py "{\"abc\":\"123\"}"' -input /user/abc.txt -output /user/output/
输出为:
['/mnt/var/lib/hadoop/tmp/nm-local-dir/usercache/hadoop/appcache/application_1423459215008_0058/container_1423459215008_0058_01_000004/./redu.py', '{\', 'abc\', ':\', '123\', '}']
您需要将 json 放在双引号内并进行适当的转义:"{\"abc\":\"123\"}"
但您的输入很可能会在传递给脚本之前经过 Hadoop 处理。
如果这不起作用,您可以尝试使用 -cmdenv name=value
通过环境传递参数。有关详细信息,请参阅 How do I pass a parameter to a python Hadoop streaming job?。