2016-07-10 4 views
3

Я пытаюсь включить пакет spark-avro при запуске искровой оболочки в соответствии с инструкциями, упомянутыми здесь: https://github.com/databricks/spark-avro#with-spark-shell-or-spark-submit.пакет spark-avro databricks

искровой оболочка --packages com.databricks: искровой avro_2.10: 2.0.1

Моей цель заключается в преобразовании Avro схемы, чтобы зажечь тип схемы, используя SchemaConverter класса, присутствующий в пакете.

import com.databricks.spark.avro._ ... // colListDel - это список полей из avsc, которые должны быть делены по какой-либо функциональной причине.

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 в моем scala-коде.

Ниже приведены мои данные envt: версия Spark: 1.6.0 Cloudera VM 5,7

Спасибо!

+0

Вы когда-нибудь это понимали? Я столкнулся с той же ошибкой. – user3809888

+0

Обходной путь: после выполнения команды пакета он загружает банки в какую-то скрытую папку: **. Ivy2/jars ** folder. Я использовал эти банки в пути к классам и написал специальный код 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:

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, и этот класс и метод стали общедоступными.

Это должно решить ваши проблемы:

искровой оболочки --packages com.databricks: искровой avro_2.10: 3.0.0

EDIT: добавлен после комментария

В библиотеке spark-avro 3.0.0 требуется Spark 2.0, поэтому вы можете заменить текущую версию Spark на версию 2.0. Другой вариант - связаться с databricks и попросить их создать версию 2.0.2 - из последней ветки 2.0.

+0

Обратите внимание, что 'spark-avro' 3.x требует Spark 2.x + –

+0

@ josh-rosen Спасибо, я отредактирую свой ответ –

Смежные вопросы