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
首先,我从字面上理解并尝试过:
line = line.split("^A")
以及
line = line.split("\\u001")
如果我这样做,第一种方法适用于我的本地机器:
cat input.txt | python mapper.py
它在本地运行正常(input.txt是上面的数据),但在hadoop流集群上失败。
有人告诉我,我应该使用"\\u001"
作为分隔符,但这在我的本地计算机或群集上也无效。
如果我使用以下方式在本地调试:
cat input.txt | python mapper.py | sort | python reducer.py
这运行得很好,如果我在本地使用"^A"
作为分隔符但是在群集上运行时遇到错误,并且错误代码也没有太大帮助......
有关如何调试此问题的任何建议?
感谢
答案 0 :(得分:5)
如果原始数据使用control-A作为分隔符,并且只是在用于列出数据的任何内容中打印为^A
,则有两种选择:
管道您使用的任何内容,将数据列入使用split('^A')
的Python脚本。
只需使用split('\u001')
分割实际的控制值。
后者几乎总是成为你真正想要的。你不能使用的原因是你写了split('\\u001')
,转义反斜杠,所以你要拆分文字字符串\u001
而不是控件-A。
如果原始数据实际上有^A
(插入符号后跟A
)作为分隔符,请使用split('^A')
。