Scala Java interop проверка на типа

Не мога да поправя тези грешки при проверка на типа в Scala:

package junk

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.io.IntWritable
import org.apache.hadoop.io.Text
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
import org.apache.hadoop.mapreduce.Job

object Sample {
  val conf: Configuration = new Configuration()
  val job: Job = new Job(conf, "sample Hadoop MapReduce program");

  job.setInputFormatClass(classOf[TextInputFormat])
  job.setOutputFormatClass(classOf[TextOutputFormat])
  job.setOutputFormatClass(classOf[TextOutputFormat[Text, IntWritable]])
}    

Съобщенията за грешка са

Sample.scala:14: error: type mismatch;
found   : java.lang.Class[org.apache.hadoop.mapreduce.lib.input.TextInputFormat](classOf[org.apache.hadoop.mapreduce.lib.input.TextInputFormat])
required: java.lang.Class[_ <: org.apache.hadoop.mapreduce.InputFormat]
 job.setInputFormatClass(classOf[TextInputFormat])
                                ^
Sample.scala:15: error: class TextOutputFormat takes type parameters
 job.setOutputFormatClass(classOf[TextOutputFormat])
                                  ^
Sample.scala:16: error: type mismatch;
found   : java.lang.Class[org.apache.hadoop.mapreduce.lib.output.TextOutputFormat[org.apache.hadoop.io.Text,org.apache.hadoop.io.IntWritable]](classOf[org.apache.hadoop.mapreduce.lib.output.TextOutputFormat])
required: java.lang.Class[_ <: org.apache.hadoop.mapreduce.OutputFormat]
 job.setOutputFormatClass(classOf[TextOutputFormat[Text, IntWritable]])

Обърнете внимание, че се опитах да setOutputFormatClass по два различни начина и и двата не успяха.

Опитвам се да напиша Hadoop WordCount: http://wiki.apache.org/hadoop/WordCount в Скала. Еквивалентните редове в Java са

job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

API документи за Job: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapreduce/Job.html


person chris    schedule 19.06.2011    source източник
comment
Вижте stackoverflow.com/questions/ 6892359/. Проблемът може да е грешка в Scala.   -  person schmmd    schedule 01.09.2011


Отговори (2)


От Scala 2.9.1 (не Scala 2.9.0 -- вижте https://issues.scala-lang.org/browse/SI-4603), това също работи:

job.setInputFormatClass(classOf[TextInputFormat])
person jhclark    schedule 01.09.2011

Вижте Програмиране в Scala, екзистенциални типове.

val textInputFormatClass = classOf[TextInputFormat].
     asInstanceOf[Class[T] forSome {type T <: InputFormat[String, String]}]

job.setInputFormatClass(textInputFormatClass)

Заменете типовете, които използвате за [String, String]

scala> val textInputFormatClass = classOf[TextInputFormat].asInstanceOf[Class[T] forSome {type T <: InputFormat[String, String]}]
textInputFormatClass: java.lang.Class[_ <: org.apache.hadoop.mapreduce.InputFormat[String,String]] = class org.apache.hadoop.mapreduce.lib.input.TextInputFormat

scala> val job = new Job
job: org.apache.hadoop.mapreduce.Job = org.apache.hadoop.mapreduce.Job@4a205144

scala> job.setInputFormatClass(textInputFormatClass)

scala>
person sourcedelica    schedule 19.06.2011
comment
Тук определено сме на прав път. За съжаление първият ред дава грешка в съобщението за грешка: класът InputFormat приема параметри на типа и ако добавя параметри тип или заместващи символи към InputFormat, тогава вторият ред не се компилира, защото подписът е различен. - person chris; 19.06.2011
comment
Добре - значи изтеглих Hadoop сега :) Актуализиран отговор. - person sourcedelica; 20.06.2011
comment
Благодаря, че си направихте всички проблеми. Бях пробвал това и получих следната грешка както в компилатора, така и в интерпретатора на Scala 2.9.0: Намерена е грешка: java.lang.Class[T], където се изисква тип T ‹: org.apache.hadoop.mapreduce.InputFormat[String,String] : java.lang.Class[_ ‹: org.apache.hadoop.mapreduce.InputFormat] - person chris; 20.06.2011
comment
Този код е повреден във 2.9.0 и е коригиран от 2.9.1: issues.scala- lang.org/browse/SI-4603 - person jhclark; 02.09.2011