Moh*_*hit 2 python hadoop hadoop-streaming
37101000ssd48800^A1420asd938987^A2011-09-10^A18:47:50.000^A99.00^A1^A0^A
37101000sd48801^A44557asd03082^A2011-09-06^A13:24:58.000^A42.01^A1^A0^A
Run Code Online (Sandbox Code Playgroud)
所以首先我从字面上理解并尝试:
line = line.split("^A")
Run Code Online (Sandbox Code Playgroud)
并且
line = line.split("\\u001")
Run Code Online (Sandbox Code Playgroud)
如果我这样做,第一种方法适用于我的本地机器:
cat input.txt | python mapper.py
Run Code Online (Sandbox Code Playgroud)
它在本地运行正常(input.txt是上面的数据),但在hadoop流集群上失败.
有人告诉我,我应该使用它"\\u001"作为分隔符,但这在我的本地机器或集群上也不起作用.
如果我在本地调试它使用:
cat input.txt | python mapper.py | sort | python reducer.py
Run Code Online (Sandbox Code Playgroud)
这运行得很好,如果我"^A"在本地使用分隔符,但我在群集上运行时遇到错误,并且错误代码也没有太大帮助......
关于如何调试这个的任何建议?
谢谢
如果原始数据使用control-A作为分隔符,并且它只是按照^A您用来列出数据的任何内容进行打印,那么您有两种选择:
管道您使用的任何内容将数据列入使用的Python脚本split('^A').
只是split('\u001')用来分割实际的控制值.
后者几乎总是成为你真正想要的.你不能使用的原因是你写的split('\\u001'),转义反斜杠,所以你分裂文字字符串\u001而不是控件-A.
如果原始数据实际上有^A(插入符号后跟一个A)作为分隔符,只需使用split('^A').
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |