1
我需要寫json給Avro。我正在使用this庫來使它更容易與scala一起工作。不能寫avro文件
我有下面的代碼片段:
case class FriendRequestAcceptedGson(
AppId: Int, CallingAppId: Int, Platform: Int, EventId: Int, Event: String,
EventTimestamp: Long, EventTxnId: String, UserId: String, SessionId: String,
TrackerVersion: String, CollectorVersion: String, EtlVersion: String,
MktMedium: String, MktSource: Int, MktTerm: String, MktContent: String,
MktCampain: String,FromUserId: String, ToUserId: String)
val json =
"""{
"AppId": 3,
"CallingAppId": 3,
"Platform": 1,
"EventId": 1601,
"Event": "FRIEND_REQUEST_ACCEPTED",
"EventTimestamp": 12345,
"EventTxnId": "0D4F2FA0-05CF-11E4-9191-0800200C9A66",
"UserId":"m64761362002",
"SessionId":"337be570-d9e6-11e3-9def-0015c5ff1d1f",
"TrackerVersion": "proxy",
"CollectorVersion": "flume",
"EtlVersion": "json-hdfs",
"MktMedium": "cpc",
"MktSource": 1,
"MktTerm": "abc",
"MktContent": "abc",
"MktCampaign": "def",
"FromUserId":"m733999",
"ToUserId":"m11114444"
}"""
val avroType = AvroType[FriendRequestAcceptedGson]
avroType.io.readJson(json) match {
case Success(readResult) => {
println(readResult)
val outStream: java.io.OutputStream = new FileOutputStream("FriendRequestAcceptedGson.avro")
avroType.io.write(readResult, outStream)
outStream.close
}
case Failure(cause) => print("Failed: "); print(cause)
}
但是當我嘗試使用Avrotools與剛剛生成的Avro的文件,然後我得到這個錯誤:
[[email protected] etl]$ java -jar avro-tools-1.7.7.jar tojson FriendRequestAcceptedGson.avro
Exception in thread "main" java.io.IOException: Not an Avro data file
at org.apache.avro.file.DataFileReader.openReader(DataFileReader.java:63)
at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:71)
at org.apache.avro.tool.Main.run(Main.java:84)
at org.apache.avro.tool.Main.main(Main.java:73)
我在做什麼錯? This是我使用的庫房的方法