scala - 在 Spark Scala 中读取二进制文件

标签 scala apache-spark binaryfiles

我需要从二进制文件中提取数据。

我用过 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/

相关文章:

scala - Scala 中的 Cypher 查询

java - 你应该遮蔽你的依赖关系吗?

sql - pyspark.sql.functions.window 函数的 'startTime' 参数和 window.start 有什么作用?

c++ - 写入和读取二进制文件以填充 vector - C++

scala - Vert.x - Scala 缺少什么?

scala - 错误 : org. apache.spark.sql.AnalysisException:无法推断 CSV 的架构

JavaScript Float32Array 文件

c - 使用 fread() 将二进制文件转换为结构体时出现问题

scala - 在 Akka Stream - Scala 中抛出异常的最佳实践是什么?

java - 清除检查点位置后 Spark 结构化流消耗的旧 Kafka 偏移量