我正在尝试为输入到spark作业的sequencefile的K和V读取具有自定义可写子类的序列文件。
需要通过与广播变量(“ candidateSet”)和Kclass.getId的匹配来过滤掉绝大多数行。不幸的是,无论采用哪种标准方法,并根据配置文件中的大部分时间都在使用,对于每个记录,值V都会反序列化。
这是我的代码。请注意,我最近的尝试是在此处一般性地将其读为“可写”,然后稍后进行回退,该功能可以正常运行,但仍然导致迭代器中的完全反序列化。
val rdd = sc.sequenceFile(
path,
classOf[MyKeyClassWritable],
classOf[Writable]
).filter(a => candidateSet.value.contains(a._1.getId))```
答案 0 :(得分:1)
结果证明,Twitter有一个很好地处理这种情况的库。具体来说,使用此类可以通过在以后的步骤中将序列化的字段读取为DataInputBuffers来求值。