2016-07-10 4 views
3

J'essaie d'inclure le paquet spark-avro en démarrant spark-shell, selon les instructions mentionnées ici: https://github.com/databricks/spark-avro#with-spark-shell-or-spark-submit.spark-avro databricks package

étincelle shell

--packages com.databricks: étincelles avro_2.10: 2.0.1

Mon intention est de convertir le schéma Avro pour déclencher le type de schéma, en utilisant la classe SchemaConverter présente dans l'emballage.

import com.databricks.spark.avro._ ... // colListDel est la liste des champs de avsc qui doivent être supprimés pour une raison fonctionnelle.

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

...

Lors de l'exécution de la boucle ci-dessus pour, je reçois ci-dessous erreur:

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

S'il vous plaît indiquer s'il y a quelque chose que je suis absent ou laissez-moi savoir comment inclure SchemaConverter dans mon code scala.

Voici mes coordonnées ENVT: version Spark: 1.6.0 Cloudera VM 5,7

Merci!

+0

avez-vous déjà trouvé ça? Je cours dans la même erreur. – user3809888

+0

Solution de contournement: une fois la commande de package exécutée, elle télécharge les fichiers JAR dans un dossier caché: **. Ivy2/jars **. J'ai utilisé ces jars dans le classpath et j'ai écrit le code personnalisé scala pour utiliser les classes de la bibliothèque de paquets. Semble interne schemaconverter est un membre privé et si vous avez besoin, vous devez le personnaliser, en vérifiant les conditions de licence requises. laissez-moi savoir si cela aide. – hadooper

+0

Probablement le 2.0.1 n'a pas été construit à partir de la branche 2.0 la plus récente. J'ai remarqué que cette classe était privée: https://github.com/databricks/spark-avro/blob/branch-1.0/src/main/scala/com/databricks/spark/avro/SchemaConverters.scala –

Répondre

1

Cet objet et la méthode mentionnée étaient privés. S'il vous plaît vérifier le code source de la version 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 { 
    ... 

Vous téléchargiez la version 2.0.1 qui a été probablement pas construit de dernière branche 2.0. J'ai vérifié la version 3.0 et cette classe et cette méthode sont publiques maintenant.

Cela devrait résoudre vos problèmes:

étincelle coquille --packages com.databricks: étincelles avro_2.10: 3.0.0

EDIT: ajouté après commentaire

La bibliothèque spark-avro 3.0.0 nécessite Spark 2.0, vous pouvez donc remplacer votre version actuelle de Spark par la version 2.0. L'autre option serait de contacter les databricks et de leur demander de construire la version 2.0.2 - à partir de la dernière branche 2.0.

+0

Notez que 'spark-avro' 3.x nécessite Spark 2.x + –

+0

@ josh-rosen Merci, je vais modifier ma réponse –