【问题标题】:spark-avro databricks packagespark-avro 数据块包
【发布时间】:2016-11-12 16:33:03
【问题描述】:

我正在尝试在启动 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 模式类型。

导入 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 虚拟机 5.7

谢谢!

【问题讨论】:

  • 你有没有想过这个问题?我遇到了同样的错误。
  • 解决方法:一旦 package 命令被执行,它会下载一些隐藏文件夹中的 jars:.ivy2/jars 文件夹。我在类路径中使用了这些 jar,并编写了 scala 自定义代码以使用包库中的类。似乎内部 schemaconverter 是一个私有成员,如果您需要自定义它,请检查所需的许可条款。让我知道这是否有帮助。
  • 可能 2.0.1 不是从最近的 2.0 分支构建的。我注意到这个类曾经是私有的:github.com/databricks/spark-avro/blob/branch-1.0/src/main/scala/…
  • 我使用的是 Spark 1.4.1,我尝试了代码val sField = new StructField(f.name,SchemaConverters.toSqlType(f.schema()).dataType,false),我发现了下面的error: Spark symbol SchemaConverters is not accessible from this place 你找到旧版本的解决方案了吗?我的工作场所仅限于 1.4.1 版

标签: apache-spark avro databricks


【解决方案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.1 版本可能不是从最新的 2.0 分支构建的。 我查了3.0版本,这个类和方法现在已经公开了。

这应该可以解决您的问题:

spark-shell --packages com.databricks:spark-avro_2.10:3.0.0

编辑:在评论后添加

spark-avro 3.0.0 库需要 Spark 2.0,因此您可以将当前的 Spark 替换为 2.0 版本。另一种选择是联系 databricks 并要求他们从最新的 2.0 分支构建 2.0.2 版本。

【讨论】:

  • 请注意spark-avro 3.x 需要 Spark 2.x+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2019-04-29
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 2018-11-24
  • 2019-09-25
相关资源
最近更新 更多