3

https://github.com/databricks/spark-avro#with-spark-shell-or-spark-submitに記載されている手順に従って、spark-shell の起動中に spark-avro パッケージを含めようとしています。

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

ありがとう!

4

1 に答える 1

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 が必要なので、現在の Spark を 2.0 バージョンに置き換えることができます。もう 1 つのオプションは、databricks に連絡して、最新の 2.0 ブランチから 2.0.2 バージョンをビルドするよう依頼することです。

于 2016-09-14T20:03:50.730 に答える