2015-11-11 3 views
3

Мне нужно извлечь данные из двоичного файла.Чтение двоичного файла в Spark Scala

Я использовал binaryRecords и получил RDD[Array[Byte]].

Отсюда я хочу, чтобы разобрать каждую запись в case class (Field1: Int, Filed2 : Short, Field3: Long)

Как я могу это сделать?

+0

У вас есть разделитель в двоичном файле? – GameOfThrows

+0

Нет, без разделителя. Обычный двоичный файл, созданный программой C со структурой int, короткий, длинный – Arik

ответ

4

Предполагая, что у вас нет разделителя, Int в Scala имеет 4 байта, Short - 2 байта и длиной 8 байт. Предположим, что ваши двоичные данные были структурированы (для каждой строки) как Int Short Long. Вы должны иметь возможность принимать байты и преобразовывать их в нужные классы.

import java.nio.ByteBuffer 

val result = YourRDD.map(x=>(ByteBuffer.wrap(x.take(4)).getInt, 
      ByteBuffer.wrap(x.drop(4).take(2)).getShort, 
      ByteBuffer.wrap(x.drop(6)).getLong)) 

Это использует библиотеку Java для преобразования байт в Int/Short/Long, вы можете использовать другие библиотеки, если вы хотите.

Смежные вопросы