将json参数作为字符串传递给python hadoop流应用程序

f8rj6qna  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(386)

我想把一个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 array时,输出显示为:

['/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','{"":"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 "{\"\":\"123\"}"' -input /user/.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', '{\\', '\\', ':\\', '123\\', '}']

gcmastyq

gcmastyq1#

您需要将json放在双引号内,并进行适当的转义: "{\"\":\"123\"}" 但是,您的输入很可能会在被传递到脚本之前通过hadoop进行处理。
如果这不起作用,您可以尝试通过环境传递您的参数 -cmdenv name=value . 查看如何将参数传递给python hadoop流作业?更多细节。

相关问题