我有以下形式的数据:
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")
and also
line = line.split("\\u001")
所以,问题是:
如果我这样做,第一种方法适用于我的本地计算机:
cat input.txt | python mapper.py
它在本地运行良好(input.txt是上面的数据),但在hadoop流集群上失败。
有人告诉我我应该使用"\\u001"
作为分隔符,但这在我的本地计算机或集群上也不起作用。
对于 hadoop 人员:
如果我使用以下命令在本地调试它:
cat input.txt | python mapper.py | sort | python reducer.py
如果我使用的话,这运行得很好"^A"
作为本地分隔符,但在集群上运行时出现错误,并且错误代码也没有太大帮助......
关于如何调试这个有什么建议吗?
Thanks
如果原始数据使用 control-A 作为分隔符,并且它只是被打印为^A
无论您使用什么方式列出数据,您都有两种选择:
将您使用的任何列表数据通过管道传输到使用的 Python 脚本中split('^A')
.
只需使用split('\u001')
根据实际控制 A 值进行拆分。
后者几乎总是您真正想要的。这对你不起作用的原因是你写了split('\\u001')
,转义反斜杠,因此您要分割文字字符串\u001
而不是控制-A。
如果原始数据确实有^A
(插入符号后跟A
) 作为分隔符,只需使用split('^A')
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)