apache-spark - spark-avro 数据 block 包

标签 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 模式类型。

导入 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。

以下是我的环境详情: 星火版本:1.6.0 Cloudera VM 5.7

谢谢!

最佳答案

这个对象和提到的方法曾经是私有(private)的。请查看 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 版本。另一种选择是联系数据 block 并要求他们从最新的 2.0 分支构建 2.0.2 版本。

关于apache-spark - spark-avro 数据 block 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38294897/

相关文章:

python - Pyspark 在加载 json 列表时避免 _corrupt_record 列

scala - Yarn 集群不能平等地管理 vcore,超出队列资源限制

python - python中的 Spark 单词计数程序错误

apache-spark - Pyspark (SparkContext) : java gateway process exited before sending the driver its port number

apache-spark - 如何将 pyspark 数据框列拆分为两列(如下例)?

java - 在 Java 中使用 Avro 的 MapReduce : String vs CharSequence vs Utf8 data types

apache-spark - "Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary."

scala - org.apache.avro.SchemaParseException : Undefined name

mysql - Avro tojson 日期格式

apache-spark - 在 Databricks 中使用 Spark SQL 创建外部表的不同方法