如何在 Spark 中从 s3 读取 .seq 文件



我正在尝试从s3获取.seq文件。当我尝试使用

sc.textFile("s3n://logs/box316_0.seq").take(5).foreach(println) 

它输出 -

    SEQorg.apache.hadoop.io.Text"org.apache.hadoop.io.BytesWritable'org.apache.hadoop.io.compress.GzipCodecp

然后是一堆编码字符。那是什么格式,我应该如何解码这个文件?我第一次使用Hadoop,所以请慷慨:)

更新 : 我试过了

sc.sequenceFile[Text,BytesWritable]("s3n://logs/box316_0.seq").take(5).foreach(println)

所以数据是存储在序列文件中的 Json blob,它给了我 -

 Serialization stack: - object not serializable 
(class: org.apache.hadoop.io.Text, value: 5) - 
field (class: scala.Tuple2, name: _1, type: class java.lang.Object) 
- object (class scala.Tuple2, (5,7g 22 73 69 6d 65 43 74 71 9d 90 92 3a .................. – user1579557 5 mins ago     

尝试:

val path = "s3n://logs/box316_0.seq"
val seq = sc.sequenceFile[LongWritable,BytesWritable](path)
val usableRDD = seq.map({case (_,v : BytesWritable) =>  Text.decode(v.getBytes))

对于序列文件,您必须了解类型。看起来你是文本,字节可写。试试这个:

sc.sequenceFile[Text,BytesWritable]("s3n://logs/box316_0.seq").take(5).foreach(println) 

我们经常遇到这个问题,所以我们继续围绕它构建了一个解决方案。我们称之为readSEQ。这使您可以将序列文件读出到Parquet,AVRO或JSON。

http://www.intricity.com/readseq/

最新更新