【发布时间】:2016-02-27 05:37:15
【问题描述】:
这实际上与我的previous question 相同,但使用 Avro 而不是 JSON 作为数据格式。
我正在使用一个 Spark 数据框,它可以从几个不同的架构版本之一加载数据:
// Version One
{"namespace": "com.example.avro",
"type": "record",
"name": "MeObject",
"fields": [
{"name": "A", "type": ["null", "int"], "default": null}
]
}
// Version Two
{"namespace": "com.example.avro",
"type": "record",
"name": "MeObject",
"fields": [
{"name": "A", "type": ["null", "int"], "default": null},
{"name": "B", "type": ["null", "int"], "default": null}
]
}
我正在使用Spark Avro 加载数据。
DataFrame df = context.read()
.format("com.databricks.spark.avro")
.load("path/to/avro/file");
可能是版本一文件或版本二文件。但是,我希望能够以相同的方式处理它,将未知值设置为“null”。我上一个问题中的建议是设置架构,但是我不想重复自己在.avro 文件和火花StructType 和朋友中编写架构。如何将 avro 架构(文本文件或生成的 MeObject.getClassSchema())转换为 sparks StructType?
Spark Avro 有一个 SchemaConverters,但它是私有的,并返回一些奇怪的内部对象。
【问题讨论】:
-
投反对票的人,你能解释一下为什么投反对票吗?
标签: java apache-spark apache-spark-sql avro