在python中划分克拉A.

时间:2012-11-19 20:51:51

标签: 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

首先,我从字面上理解并尝试过:

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"作为分隔符但是在群集上运行时遇到错误,并且错误代码也没有太大帮助......

有关如何调试此问题的任何建议?
感谢

1 个答案:

答案 0 :(得分:5)

如果原始数据使用control-A作为分隔符,并且只是在用于列出数据的任何内容中打印为^A,则有两种选择:

  1. 管道您使用的任何内容,将数据列入使用split('^A')的Python脚本。

  2. 只需使用split('\u001')分割实际的控制值。

  3. 后者几乎总是成为你真正想要的。你不能使用的原因是你写了split('\\u001'),转义反斜杠,所以你要拆分文字字符串\u001而不是控件-A。

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