2016-06-21 2 views
2

kompilieren Ich benutze Mongo-Hadoop-Client (r1.5.2) in Funke, um Daten von MongoDB und Bson zu lesen, unter diesem Link: https://github.com/mongodb/mongo-hadoop/wiki/Spark-Usage. Bis jetzt kann ich ohne Probleme aus mongoDB lesen. Die bson-Konfiguration kann jedoch nicht einmal kompiliert werden. Bitte helfen Sie.Spark kann nicht neuAPIHadoopRDD mit MONGO-Hadoop-Connectors BSONFileInputFormat

meinen Code in scala:

dataConfig.set("mapred.input.dir", "path.bson") 

    val documents = sc.newAPIHadoopRDD(
     dataConfig,     
     classOf[BSONFileInputFormat], 
     classOf[Object],    
     classOf[BSONObject])  

Fehler:

Error:(56, 24) inferred type arguments [Object,org.bson.BSONObject,com.mongodb.hadoop.mapred.BSONFileInputFormat] do not conform to method newAPIHadoopRDD's type parameter bounds [K,V,F <: org.apache.hadoop.mapreduce.InputFormat[K,V]] 
    val documents = sc.newAPIHadoopRDD(
        ^
+0

Try BSONFileInputFormat zu verwenden, anstatt MongoInputFormat. Bitte geben Sie auch an, welche Version des Mongo-Hadoop-Anschlusses Sie verwenden. –

Antwort

2

ich die Lösung gefunden! Das Problem wird durch Generika von Inputformat

newAPIHadoopRDD erfordern Eingabeformat als

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

wird verursacht zu werden scheint Obwohl BSONFileInputFormat erstreckt FileInputFormat [K, V], die sich Inputformat [K, V], tat es nicht Geben Sie K, V-Generika als Object und BSONObject an. (Eigentlich K, V Generics sind nicht in BSONFileInputFormat erwähnt, kann die Klasse wirklich kompilieren?).

Auf jeden Fall ist die Lösung BSONFileInputFormat als Unterklasse von Inputformat mit K und V definiert würfen

val documents = sc.newAPIHadoopRDD(
    dataConfig,     
    classOf[BSONFileInputFormat].asSubclass(classOf[org.apache.hadoop.mapreduce.lib.input.FileInputFormat[Object, BSONObject]]), 
    classOf[Object],    
    classOf[BSONObject]) 

Jetzt funktioniert es ohne Probleme :)

Verwandte Themen