2016-07-10 9 views
3

spark-shellを起動しているときに、ここに記載されている指示に従って、spark-avroパッケージをインクルードしようとしています:https://github.com/databricks/spark-avro#with-spark-shell-or-spark-submitspark-avro databricks package

火花シェル--packagesのcom.databricks:火花avro_2.10:2.0.1

私の意図は、パッケージ内に存在SchemaConverterクラスを使用して、スキーマ・タイプを刺激するアブロスキーマを変換することです。

import com.databricks.spark.avro._... // colListDelは、何らかの機能上の理由で、deltのフィールドのリストです。

for(field <- colListDel){ 
println(SchemaConverters.toSqlType(field.schema()).dataType); 
} 

...

ループのための上記の実行で、私はエラーの下に取得する:

<console>:47: error: object SchemaConverters in package avro cannot be accessed in package com.databricks.spark.avro 
      println(SchemaConverters.toSqlType(field.schema()).dataType); 

私が行方不明です何があるかどうかをお勧めまたは私はSchemaConverterを含める方法を教えてください私のスカラコードで。以下は

は私のenvtの詳細です: スパークバージョン:1.6.0 ClouderaのVM 5.7

ありがとう!

+0

これはあなたがこれを理解しましたか?私は同じエラーに遭遇しています。 – user3809888

+0

回避方法:packageコマンドを実行すると、いくつかの隠しフォルダ:**。ivy2/jars **フォルダにjarファイルがダウンロードされます。クラスパスでこれらのjarファイルを使用し、パッケージライブラリのクラスを使用するためにscalaカスタムコードを書きました。内部的には、schemaconverterはプライベートメンバーであり、必要な場合は、必要なライセンス条件をチェックしてカスタマイズする必要があります。これが役に立ったら教えてください。 – hadooper

+0

おそらく、2.0.1は最新の2.0ブランチから構築されたものではありませんでした。私はこのクラスがプライベートであることに気づいた:https://github.com/databricks/spark-avro/blob/branch-1.0/src/main/scala/com/databricks/spark/avro/SchemaConverters.scala –

答えて

1

このオブジェクトと前述のメソッドは、プライベートであった。バージョン1.0からソースコードをチェックしてください:あなたはおそらく、最新の2.0ブランチからビルドされませんでした2.0.1バージョンをダウンロードして

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 { 
    ... 

。 3.0バージョンを確認しましたが、このクラスとメソッドは公開されています。

これはあなたの問題を解決する必要があります:火花avro_2.10:3.0.0

EDIT:

火花シェルはcom.databricks --packagesコメントの後に追加し

spark-avro 3.0.0ライブラリはSpark 2.0を必要とするため、現在のSpark 2.0を置き換えることができます。もう1つのオプションは、databricksに連絡して2.0.2のバージョン(最新の2.0ブランチから)をビルドするように要求することです。

+0

'spark-avro' 3.xではSpark 2.xが必要です。+ –

+0

@ josh-rosenありがとう、私は自分の答えを編集します –