Spark序列文件中的RDD和反序列化

时间:2016-10-05 06:15:01

标签: apache-spark deserialization apache-spark-sql spark-dataframe

我正在使用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]])}

0 个答案:

没有答案