2016-06-21 3 views
2

私はspongでmongo-hadoopクライアント(r1.5.2)を使用して、このリンクに続くmongoDBとbsonのデータを読み込みます:https://github.com/mongodb/mongo-hadoop/wiki/Spark-Usage。これまではmongoDBから問題なく読める。しかし、bsonの設定はコンパイルできません。助けてください。spongはmongo-hadoop-connectorのBSONFileInputFormatで新しいAPIHadoopRDDをコンパイルできません

Scalaでは私のコード:

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

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

エラー:

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

ではなくMongoInputFormatのBSONFileInputFormatを使用してみてください。また、使用しているmongo-hadoopコネクタのバージョンを指定してください。 –

答えて

2

私は、それに対する解決策を見つけました! 問題、それはなかった[V、K]のInputFormatを延びる[V、K]のInputFormat

のジェネリック

BSONFileInputFormatはFileInputFormatを拡張がnewAPIHadoopRDDが

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

などの入力フォーマットを必要とされることにより引き起こされると思われますK、VジェネリックをObjectおよびBSONObjectとして指定します。 (実際にはK、VジェネリックスはBSONFileInputFormatには言及されていませんが、実際にクラスをコンパイルできますか?)

とにかく、解決策は、定義されたKとVとのInputFormatのサブクラスとしてBSONFileInputFormatをキャストすることです:

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

今では問題なく動作します:)

関連する問題