Hadoop Streaming 多行输入
我正在使用Dumbo来处理一些Hadoop Streaming的工作。我的手头有一堆JSON字典,每个字典里包含一篇文章(多行文本)和一些元数据。我知道Hadoop在处理大文件时表现最好,所以我想把所有的JSON字典合并成一个文件。
问题是,我不知道怎么让Hadoop把每个字典/文章当作一个单独的值来读取,而不是在换行符处拆分。怎么才能告诉Hadoop使用自定义的记录分隔符呢?或者我可以把所有的JSON字典放到一个列表数据结构里,让Hadoop读取这个列表吗?
或者,也许把字符串编码成(base64?)可以去掉所有的换行符,普通的“读取器”就能处理它了?
2 个回答
0
concatenated-json-mapreduce 是一种自定义输入格式和记录读取器,它会根据大括号的开闭来拆分 JSON 对象。
这个工具是为了处理流式 JSON 而写的(也就是说,它不是处理用换行符分隔的 JSON),只要你的 JSON 对象格式正确,使用 \n
代替实际的换行符,它就能正常工作。
1
在合并你的JSON文件时,你可以把每个字典里的所有换行符替换成空格。换行符在JSON中除了作为空白字符外,并没有其他特别的意义。