gpt4 book ai didi

java - 无法写入 avro 文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:16 25 4
gpt4 key购买 nike

我需要将 json 写入 Avro。我正在使用this库,以便更轻松地使用 scala。

我有以下代码片段:

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 文件一起使用时,我收到此错误:

[lee@lee 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是我正在使用的库中的方法

最佳答案

斯 Karaf 罗太棒了!但现在它无法写入正确的数据文件(它写入 avros,但不写入任何 header 信息)。

直到一个很棒的人贡献该功能之前,您可以通过以下方式在 Scala 中编写 avro 数据文件(即使用 Scala 案例类来表示记录):

a) 使用 @AvroRecord 注释您的 case 类 FriendRequestAcceptedGson 并使用标准 Java Avro 写入文件,如 these tests 所示.

b) 勇敢地尝试这个相对未经测试的 Salat-Avro 分支.

关于java - 无法写入 avro 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26629259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com