2015-02-25 3 views
1

Я пытаюсь прочитать некоторые данные из хаопа в RDD в Искры с помощью интерактивной оболочки Scala, но у меня возникают проблемы с доступом к некоторым классам, которые мне нужны для десериализации данных.Ссылка на java-вложенный класс в Spark Scala

Я начинаю импортировать необходимый класс

import com.example.ClassA 

Который работает отлично. ClassA находится в банке на пути «банок» и имеет ClassB как общественный статический вложенный класс

Я тогда пытаюсь использовать ClassB как так:

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]) 

Это немного осложненной одной из другие классы принимают ClassB как тип, но я думаю, что все должно быть хорошо.

Когда я исполняю эту линию, я получаю следующее сообщение об ошибке:

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

Я также попытался с помощью оператора импорта

import com.example.ClassA$ClassB 

, и это также, кажется, хорошо с этим.

Любые советы о том, как я мог бы приступить к отладке это было бы оценено

Спасибо за чтение.

обновление:

Изменение '$' к '' ссылаться на вложенный класс, кажется, пройти эту проблему, хотя тогда я получил следующую ошибку синтаксиса:

'<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]] 
+1

Я думаю, вы имеете в виду [вложенный] (http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) класс, а не [подкласс] (http://docs.oracle.com/) JavaSE/учебник/Java/IandI/subclasses.html). –

+0

Я должен упомянуть, я использую Spark 1.2.0 – user1111284

+0

Извините, да, это вложенный класс, не подкласс - мой плохой – user1111284

ответ

2

Обратите внимание на типы, что newAPIHadoopFile ожидает:

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

важной частью здесь является то, что общий тип InputFormat ожидает типы K и V, т.е. точные типы первых двух параметров для метода.

В вашем случае третий параметр должен быть типа

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

ли ваш класс продлить FileInputFormat<LongWritable, V>?

+0

Да, он расширяет 'org.apache.hadoop.mapreduce.lib.input.FileInputFormat', который, в свою очередь, расширяет 'org.apache.hadoop.mapreduce.InputFormat' – user1111284

+0

А, я понимаю, что это такое, позвольте мне уточнить мой ответ. –

+0

Извините, я должен был быть яснее здесь; мой класс «Формат» объявлен как «Формат extends FileInputFormat ', поэтому он принимает только один параметр типа напрямую. – user1111284

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