我正在使用Spark 1.5.0并且我想读取sqeuence文件 - key是filename(ext),value实际上是Myclass类型的java对象列表
这是我没有Spark的代码。
val ois = new ObjectInputStream(new FileInputStream("/path/to/seqfile"))
val data = ois.readObject.asInstanceOf[java.util.List[MyClass]]
val scalalist = data.asScala
我想使用Spark来做同样的事情,但是我不确定序列化数据何时在字符串中可用,如何创建一个RDD,其中元组的第二个元素被转换为MyClass对象的列表。
val seq_rdd = sc.sequenceFile("/path/to/seqfile", classOf[Text], classOf[BytesWritable])
val seq_formatted_rdd = seq_rdd.map { case (text, bytes) => (text.toString, bytes.copyBytes) }
val my_rdd = seq_formatted_rdd.map { case (text, ser_bytes) => (text, new ByteArrayInputStream(ser_bytes)) }
我得到以下异常,因为ByteArrayInputStream没有实现Serializable:
- object not serializable(class:java.io.ByteArrayInputStream,value:java.io.ByteArrayInputStream@73d5a077)
之后,我想做以下事情:
val my_rdd1 = my_rdd.map { case (text, bytestream) => (text, new ObjectInputStream(bytestream).readObject.asInstanceOf[java.util.List[MyClass]])}