spark-avro databricks包

时间:2016-07-10 17:58:59

标签: apache-spark avro databricks

我正在尝试在启动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

谢谢!

1 个答案:

答案 0 :(得分:1)

此对象和上述方法曾经是私有的。请检查1.0版的源代码:

https://github.com/databricks/spark-avro/blob/branch-1.0/src/main/scala/com/databricks/spark/avro/SchemaConverters.scala

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分支。