Есть ли источник Scalding, который я могу использовать для lzo-сжатых двоичных данных?

Я записываю сериализованные записи Thrift в файл, используя сжатие LZO Elephant Bird. Для этого я использую их класс ThriftBlockWriter. Затем в моем задании Scalding используется FixedPathLzoThrift для обработки записей. Все работает нормально. Проблема в том, что я ограничен записями одного класса Thrift.

Я хочу начать использовать RawBlockWriter вместо ThriftBlockWriter[MyThriftClass]. Поэтому вместо записей Thrift, сжатых с помощью LZO, я буду вводить необработанные массивы байтов с LZO-сжатием. У меня вопрос: что использовать вместо FixedPathLzoThrift[MyThriftClass]?

Объяснение тега "protocol-buffers": Elephant Bird использует класс Protocol Buffers SerializedBlock для обертывания необработанного ввода, как показано на здесь.


person fblundun    schedule 15.01.2015    source источник


Ответы (1)


Я решил это, создав класс FixedPathLzoRaw для использования вместо FixedPathLzoThrift:

case class FixedPathLzoRaw(path: String*) extends FixedPathSource(path: _*) with LzoRaw

// Corresponds to LzoThrift trait
trait LzoRaw extends LocalTapSource with SingleMappable[Array[Byte]] with TypedSink[Array[Byte]] {
  override def setter[U <: Array[Byte]] = TupleSetter.asSubSetter[Array[Byte], U](TupleSetter.singleSetter[Array[Byte]])
  override def hdfsScheme = HadoopSchemeInstance((new LzoByteArrayScheme()).asInstanceOf[Scheme[_, _, _, _, _]])
}
person fblundun    schedule 16.01.2015