SequenceFileInputFilter.Filter 在 Hadoop 中有什么用
What is use of SequenceFileInputFilter.Filter in Hadoop
我可以看到 SequenceFileInputFilter.Filter 有 accept 方法,它 return 布尔值,这里我们可以检查当前处理键,如果当前处理键是不符合我们的兴趣,我们可以从处理中跳过该行。
据我所知,在读取序列文件时,hadoop 从序列文件自身获取映射器输入键 class 信息(一些关于 class 的元数据)。
那么一个序列文件是否有可能有不同类型的密钥class,
如果不可能,那么 Filter class
的实时使用是什么?
我的理解是这样的:
因为我们可以使用自定义键创建 Mapper class,如下所示:
DerivedMapper extends Mapper<InCustomKey, Text, OutCustomKey, Text>
地图方法是
public void map(InCustomKey key, Text value, Context contx)
因此 SequencefileReader 将从文件中存在的元数据中读取密钥的 class,
并使用该信息创建对象,该信息将传递给 map 方法。 实施过滤器可能有两个原因
为了让代码更健壮,如果 Sequence 文件的 Key class 与 Mapper 的输入键 class 不同,那么它会抛出一些运行时异常
如果我们将目录作为输入传递,则可能有一些文件在 Sequences 文件中具有不同的键。
在上述两种情况下,我们都可以利用过滤器的功能来跳过对此类记录的处理。
我可以看到 SequenceFileInputFilter.Filter 有 accept 方法,它 return 布尔值,这里我们可以检查当前处理键,如果当前处理键是不符合我们的兴趣,我们可以从处理中跳过该行。
据我所知,在读取序列文件时,hadoop 从序列文件自身获取映射器输入键 class 信息(一些关于 class 的元数据)。 那么一个序列文件是否有可能有不同类型的密钥class, 如果不可能,那么 Filter class
的实时使用是什么?我的理解是这样的:
因为我们可以使用自定义键创建 Mapper class,如下所示:
DerivedMapper extends Mapper<InCustomKey, Text, OutCustomKey, Text>
地图方法是
public void map(InCustomKey key, Text value, Context contx)
因此 SequencefileReader 将从文件中存在的元数据中读取密钥的 class, 并使用该信息创建对象,该信息将传递给 map 方法。 实施过滤器可能有两个原因
为了让代码更健壮,如果 Sequence 文件的 Key class 与 Mapper 的输入键 class 不同,那么它会抛出一些运行时异常
如果我们将目录作为输入传递,则可能有一些文件在 Sequences 文件中具有不同的键。
在上述两种情况下,我们都可以利用过滤器的功能来跳过对此类记录的处理。