我正在尝试在启动spark-shell时包含spark-avro包,按照此处提到的说明进行操作:https://github.com/databricks/spark-avro#with-spark-shell-or-spark-submit。
spark-shell --packages com.databricks:spark-avro_2.10:2.0.1
我的目的是使用程序包中存在的SchemaConverter类将avro架构转换为spark模式类型。
import com.databricks.spark.avro._ ... // colListDel是avsc中由于某些功能原因而被删除的字段列表。
for( field <- colListDel){
println(SchemaConverters.toSqlType(field.schema()).dataType);
}
...
执行上面的for循环时,我得到以下错误:
<console>:47: error: object SchemaConverters in package avro cannot be accessed in package com.databricks.spark.avro
println(SchemaConverters.toSqlType(field.schema()).dataType);
请建议我是否遗漏了任何内容,或者告诉我如何在我的scala代码中包含SchemaConverter。
以下是我的envt详情: Spark版本: 1.6.0 Cloudera VM 5.7
谢谢!
答案 0 :(得分:1)
此对象和上述方法曾经是私有的。请检查1.0版的源代码:
private object SchemaConverters {
case class SchemaType(dataType: DataType, nullable: Boolean)
/**
* This function takes an avro schema and returns a sql schema.
*/
private[avro] def toSqlType(avroSchema: Schema): SchemaType = {
avroSchema.getType match {
...
您正在下载可能不是从最新的2.0分支构建的2.0.1版本。 我检查了3.0版本,这个类和方法现在都是公开的。
这可以解决你的问题:
spark-shell --packages com.databricks:spark-avro_2.10:3.0.0
编辑:在评论后添加
spark-avro 3.0.0库需要Spark 2.0,因此您可以用2.0版本替换当前的Spark。另一个选择是联系databricks并要求他们构建2.0.2版本 - 来自最新的2.0分支。