在python中划分克拉A.

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

对于hadoop人:

如果我在本地调试它使用:

cat input.txt | python mapper.py | sort | python reducer.py
Run Code Online (Sandbox Code Playgroud)

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

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

aba*_*ert 5

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

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

  2. 只是split('\u001')用来分割实际的控制值.

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

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