我正在尝试从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/