hadoop - mapreduce 是否应该映射文本文件的一行,然后减少或处理整个文本文件?
问题描述
我正在 50k 文本文档上运行 1-100“页”长的 Mapreduce 作业。我在文档上执行的不多,只是一些正则表达式过程。MapReduce 大约需要 7 个小时。
mapper 函数在一行文本上运行,基本上每个文档中的每一行文本都会调用 map 函数,这是很多过程。然后 reducer 运行并合并数据。
public class TextMetricsMapper extends Mapper<LongWritable, Text, Text, Text> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
StringBuilder sb = new StringBuilder();
String line = value.toString();
…
由于我正在阅读小型文本文件,因此我的大部分处理时间似乎都花在了调用映射器上。我的意思是,如果 50,000 个文件中的 1 个有 5,000 行,那么仅针对该文件就有 5,000 个映射进程。
我如何将映射器更改为只读取整个文件?我真的很想立即在映射器中查看整个文档以创建我需要的统计信息。
*由于业务需求,我必须使用 Hadoop。
解决方案
推荐阅读
- java - POST API 请求超时问题
- html - 如何在Angular中的新视图/组件上传递和显示计算结果?
- scala - 由于 java.lang.NoSuchMethodError,sbt 无法编译 Scala 项目
- nuxt.js - 如果路由不以 index 开头,则防止 nuxt 从 index 开始
- swift - 我可以查询并查看 Firestore 的两个不同字段中是否存在一个值吗?
- python - pandas_datareader 的非弃用版本是什么?
- regex - 正则表达式从文件中提取单词
- keras - 使用 Tensorflow 后端在 Keras 中实现双编码器 LSTM
- node.js - 如何使用连接在我的节点服务器上启用 gzip?
- python - 如何从文件中读取浮点数并在 Python 中显示平均值