Hadoop Streaming 多行输入

1 投票
2 回答
1180 浏览
提问于 2025-04-16 01:47

我正在使用Dumbo来处理一些Hadoop Streaming的工作。我的手头有一堆JSON字典,每个字典里包含一篇文章(多行文本)和一些元数据。我知道Hadoop在处理大文件时表现最好,所以我想把所有的JSON字典合并成一个文件。

问题是,我不知道怎么让Hadoop把每个字典/文章当作一个单独的值来读取,而不是在换行符处拆分。怎么才能告诉Hadoop使用自定义的记录分隔符呢?或者我可以把所有的JSON字典放到一个列表数据结构里,让Hadoop读取这个列表吗?

或者,也许把字符串编码成(base64?)可以去掉所有的换行符,普通的“读取器”就能处理它了?

2 个回答

0

concatenated-json-mapreduce 是一种自定义输入格式和记录读取器,它会根据大括号的开闭来拆分 JSON 对象。

这个工具是为了处理流式 JSON 而写的(也就是说,它不是处理用换行符分隔的 JSON),只要你的 JSON 对象格式正确,使用 \n 代替实际的换行符,它就能正常工作。

1

在合并你的JSON文件时,你可以把每个字典里的所有换行符替换成空格。换行符在JSON中除了作为空白字符外,并没有其他特别的意义。

撰写回答