在Spark中读取SequenceFile时是否只能评估Key?

时间:2019-04-26 12:26:33

标签: scala apache-spark sequencefile

我正在尝试为输入到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))```

1 个答案:

答案 0 :(得分:1)

结果证明,Twitter有一个很好地处理这种情况的库。具体来说,使用此类可以通过在以后的步骤中将序列化的字段读取为DataInputBuffers来求值。

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