在 Spark 中读取 SequenceFile 时是否可以仅评估 Key?

Is it possible to only evaluate the Key when reading a SequenceFile in Spark?

我正在尝试读取一个序列文件,其中包含输入到 spark 作业的序列文件的 K 和 V 的自定义可写子类。

需要通过匹配广播变量 ("candidateSet") 和 Kclass.getId 来过滤掉绝大多数行。不幸的是,无论使用标准方法如何,并且根据花费大部分时间的配置文件,每条记录的值 V 都会被反序列化。

这是我的代码。请注意,我最近尝试将这里的内容一般地读为 "Writable",然后再转换回去,这在功能上起作用但仍然导致迭代器中的完全反序列化。

val rdd = sc.sequenceFile(
      path,
      classOf[MyKeyClassWritable],
      classOf[Writable]
    ).filter(a => candidateSet.value.contains(a._1.getId))```

原来 Twitter 有一个库可以很好地处理这种情况。具体来说,使用此 class 允许在后续步骤中通过将序列化字段读取为 DataInputBuffers

来评估它们

https://github.com/twitter/elephant-bird/blob/master/core/src/main/java/com/twitter/elephantbird/mapreduce/input/RawSequenceFileRecordReader.java