当前位置: 首页 > 知识库问答 >
问题:

必须实现Hadoop MapReduce RecordReader?

幸阳波
2023-03-14

对于许多应用程序来说,基于输入大小的逻辑拆分是不够的,因为要尊重记录边界。在这种情况下,应用程序还必须实现一个RecordReader,该RecordReader负责尊重记录边界,并向单个任务呈现逻辑输入拆分的面向记录的视图。

WordCount示例应用程序中基于输入大小的逻辑拆分是否不足?如果是,在源代码中的什么地方可以找到RecordReader的实现?

共有1个答案

华永逸
2023-03-14

输入拆分是对数据的逻辑引用。如果您查看API,可以看到它对记录边界一无所知。为每个输入拆分启动映射器。映射器的map()对每个记录(在WordCount程序中,文件中的每一行)运行。

但是映射器如何知道记录边界在哪里呢?

这就是您引用Hadoop MapReduce InputFormat接口的地方-

[L]基于输入大小的逻辑分裂对于许多应用是不够的,因为记录边界必须得到尊重。

这意味着,对于例如

a b c d e
f g h i j
k l m n o

我们希望每句台词都能成为一张唱片。当逻辑拆分基于输入大小时,可能会有两个拆分,例如:

a b c d e
f g 
    h i j 
k l m n 0 
 类似资料:
  • 问题内容: 有人在说我必须实施OnFragmentInteractionListener,这是一个错误,但是据我所知我正确地实现了它。任何帮助将不胜感激。 主要活动 导航片段 内容片段 错误 问题答案: 两者中的接口都包含一个具有相同签名的方法,并且正在实现一种方法来尝试覆盖这两个接口。 更改一个或两个方法的签名,然后在中实现两个方法。例如: 导航片段 内容片段 主要活动

  • 下面是一个简单的例子,展示了我的问题: 在中,我提供了方法和的实现,这是来自的唯一抽象方法。但是,当我编译时,我仍然会遇到以下错误: 类型MyWork必须实现继承的抽象方法AbstractCollection.size() 或者 我的任务。java:3:错误:MyTask不是抽象的,并且不重写AbstractList中的抽象方法get(int) (取决于编译器)。当然,我使用的是java 8。 所

  • 问题内容: 如果我制作了一个不实现Serializable的Composite-id类,例如: 发生错误,例如: hibernate实体类不必是可序列化的。那么,为什么Composite- id类必须实现Serializable?我读了这个主题,但是没有给我足够的信息。 问题答案: 会话对象需要可序列化,因此它引用的所有对象也必须可序列化。id用作索引会话中已加载对象的键。如果是Composite

  • 如题,Elasticsearch不也是一个数据库吗?它可以单独实现倒排索引和全文检索吗?还是说必须通过Redis才能实现?

  • 问题内容: 无论是Javadoc还是代码本身,Comparator接口都定义了: 但这没有编译任何概率: 但这确实是: 接口不允许用户重写方法的方法是什么? 问题答案: 首先,JavaDocs清楚地解释了您应该实现此方法: 此外,仅当指定对象也是一个比较器并且施加与该比较器相同的顺序时,此方法才能返回true。因此,意味着对于每个对象引用和。 但后来: 请注意,始终不要覆盖即可。 即使它是接口的一

  • 我在向数据库添加新的自定义用户时遇到问题。我知道网上有一些关于这个问题的帖子,但我找不到解决问题的办法。点击注册页面中的“提交”按钮后,这里是哪个模板: 它一直说:“无法分配” 源代码: 观点。巴拉圭 模特。巴拉圭 表单.PY 设置。.PY: 编辑 完全错误跟踪: 文件"C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1