Référencez une classe imbriquée java dans Spark Scala


J'essaie de lire certaines données de hadoop dans un RDD dans Spark en utilisant le shell Scala interactif mais j'ai du mal à accéder à certaines des classes dont j'ai besoin pour désérialiser les données.

Je commence par importer la classe nécessaire

import com.example.ClassA

Qui fonctionne bien. {[5] } est situé dans un jar dans le chemin 'jars' et a ClassB en tant que classe imbriquée statique publique

J'essaie ensuite d'utiliser ClassB comme ceci:

val rawData = sc.newAPIHadoopFile(dataPath, classOf[com.exmple.mapreduce.input.Format[com.example.ClassA$ClassB]], classOf[org.apache.hadoop.io.LongWritable], classOf[com.example.ClassA$ClassB])

Ceci est légèrement compliqué par l'une des autres classes prendre ClassB comme un type, mais je pense que cela devrait être bien.

Lorsque j'exécute cette ligne, j'obtiens l'erreur suivante:

<console>:17: error: type ClassA$ClassB is not a member of package com.example

J'ai aussi essayé d'utiliser l'instruction d'importation

import com.example.ClassA$ClassB 

Et cela semble aussi bien avec cela.

Tout conseil sur la façon dont je pourrais procéder au débogage serait apprécié

Merci d'avoir lu.

Mise à jour:

Changer le '$' en a '.'pour référencer la classe imbriquée semble dépasser ce problème, bien que j'aie ensuite obtenu le erreur de syntaxe suivante:

'<console>:17: error: inferred type arguments [org.apache.hadoop.io.LongWritable,com.example.ClassA.ClassB,com.example.mapredu‌​ce.input.Format[com.example.ClassA.ClassB]] do not conform to method newAPIHadoopFile's type parameter bounds [K,V,F <: org.apache.hadoop.mapreduce.InputFormat[K,V]]
Author: user1111284, 2015-02-25

1 answers

Notez les types que le newAPIHadoopFile attend:

K,V,F <: org.apache.hadoop.mapreduce.InputFormat[K,V]

La partie importante ici est que le type générique InputFormat attend les types K et V, c'est-à-dire les types exacts des deux premiers paramètres de la méthode.

, Dans votre cas, le troisième paramètre doit être de type

F <: org.apache.hadoop.mapreduce.InputFormat[LongWritable, ClassA.ClassB]

Votre classe étend-elle FileInputFormat<LongWritable, V>?

 2
Author: Zoltán, 2015-02-25 16:21:51