2016-02-22 24 views
0

我有一个JSON文件,我想用Spark加载到MongoDB中。我有单个元素加载到收集像下面使用sparksql在MongoDB中加载JSON数据

val mongoClient = MongoClient(127.0.0.1, 27017) 
val collection = mongoClient(dbname)(collection_name) 
for (a <- 1 to 10) { 
    collection.insert { 
    MongoDBObject("id" -> a.toString, 
     "age" -> (10 + a), 
     "description" -> s"description $a", 
     "enrolled" -> (a % 2 == 0), 
     "name" -> s"Name $a") 
    } 

因为MongoDB中已经存储了JSON格式的数据,有没有办法直接加载我的JSON文件的方式?

+0

不,MongoDB不会以JSON格式存储数据。它使用的是BSON,这不是一回事。你可以转储到JSON并从那里读取,但它远非直接。也不能像Stratio那样推下谓词。 – zero323

回答

0

当然,MongoDB的底层数据格式为BSON,但请记住我们可以使用mongoexport以json格式导出MongoDB文档。也许这与你的情况无关,我的观点是我们实际上可以用SparkSQL加载json文件,下面是我如何完成它。

我们这里需要的一个重要库是Spark library for easy MongoDB access

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.sql.SQLContext 
import com.stratio.datasource.mongodb._ 
import com.stratio.datasource.mongodb.MongodbConfig._ 

object DFToMongoDB extends App { 

    lazy val sc = new SparkContext(new SparkConf() 
    .setAppName("mongodb") 
    .setMaster("local[4]")) 

    val sqlContext = new SQLContext(sc) 

    /* 
    sample data in xxx.json 

    { 
     "_id":"xxxx","workHome":false,"commute":true, 
     "tel":false,"weekend":true,"age":100.0 
    } 
    */ 
    val dataFrame = sqlContext.read.json("xxx.json") 

    def forCollection(collectionName: String) = { 
    MongodbConfigBuilder(
     Map(
     Host -> List("127.0.0.1"), Database -> "xxx", 
     Collection -> collectionName, 
     SamplingRatio -> 1.0, 
     WriteConcern -> com.mongodb.casbah.WriteConcern.Acknowledged, 
     SplitSize -> 8, SplitKey -> "_id" 
    ) 
    ).build 
    } 

    // dataFrame will be converted to MongodbDataFrame here 
    dataFrame.saveToMongodb(forCollection("xxx")) 
} 

此外,我尝试的情况下收不MongoDB中负载之前存在,在那之后的MongoDB将创建在JSON文件记录的集合。至于其他情况,你可以尝试,如果你喜欢。

无论如何,希望它有帮助。

+0

Alan,当我尝试上述功能时,显示错误。它说MongodbConfigBuilder中的选项不可用。我正在使用Spark 1.4版本和spark-mongodb_2.10-0.9.2.jar。你能帮忙吗? – Sathyaraj

+0

对不起,我应该告诉你verison。我正在使用spark-core 1.5.1和spark-mongodb 0.10.3。也许这是由verison引起的问题。如果可以,尝试升级版本。或者在您的verison中查找'''com.stratio.datasource.mongodb.MongodbConfigBuilder''并尝试显式地导入选项,而不是使用通配符。 –