2016-01-15 22 views
-1

我正在嘗試從s3獲取.seq文件。當我嘗試使用如何在Spark中讀取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  

回答

2

嘗試:

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)) 
+0

你讓我的一天。 – user1579557

0

隨着序列文件你必須知道的類型。它看起來是文本,BytesWritable。試試這個:

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

謝謝。所以數據是一個json blob。所以它給了我下面的msg - 序列化堆棧: \t - 對象不可序列化(class:org.apache.hadoop.io.Text,value:5) \t - field(class:scala.Tuple2,name:_1,type:類java.lang.Object) \t - object(class scala.Tuple2,(5,7g 22 73 69 6d 65 43 74 71 9d 90 92 3a ................. – user1579557

0

我們遇到了這個問題,所以往往我們說幹就幹,建成圍繞它的解決方案。我們稱之爲readSEQ。這使您可以將序列文件讀出到Parquet,AVRO或JSON。

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

相關問題