我需要从二进制文件中提取数据。
我用过 binaryRecords
并获得 RDD[Array[Byte]]
.
从这里我想将每条记录解析为case class (Field1: Int, Filed2 : Short, Field3: Long)
我怎样才能做到这一点?
最佳答案
假设您没有分隔符,Scala 中的 Int 为 4 个字节,Short 为 2 个字节,long 为 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,如果需要,您可以使用其他库。
关于scala - 在 Spark Scala 中读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654135/