2

我有表格中的数据:

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"分隔符,但这在我的本地机器或集群上也不起作用。

对于 hadoop 人:

如果我在本地调试它:

cat input.txt | python mapper.py | sort | python reducer.py

这运行得很好,如果我"^A"在本地使用分隔符但在集群上运行时出现错误,并且错误代码也不是很有帮助......

关于如何调试它的任何建议?
谢谢

4

1 回答 1

5

如果原始数据使用 control-A 作为分隔符,并且它只是像^A您用来列出数据的任何内容一样打印,您有两种选择:

  1. 将您使用列表中的任何数据通过管道传输到使用split('^A').

  2. 只需用于split('\u001')拆分实际的 control-A 值。

后者几乎总是你真正想要的。这对您不起作用的原因是您编写了split('\\u001'),转义了反斜杠,因此您在文字字符串\u001上而不是在 control-A 上进行拆分。

如果原始数据实际上有^A(一个插入符号后跟一个A)作为分隔符,只需使用split('^A').

于 2012-11-19T21:12:12.200 回答