我测试过将一个小文件加载到MongoDB集合中。我使用Mongo-Spark Connector编写的代码。我已在MongoDB中加载并附加了JSON文件,该文件成功了,因为测试文件小于16 MB。 JSON文件如下所示: here
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql._
import org.apache.spark.sql.functions._
import com.mongodb.spark._
import org.apache.spark.sql.hive.HiveContext
import org.bson.Document
import org.bson.Document._
import org.bson._
import org.bson.types.ObjectId
import jdk.nashorn.internal.ir.annotations.Ignore
import com.mongodb.casbah.MongoCollection
//import com.mongodb.casbah.MongoConnection
import com.mongodb.casbah.Imports._
import com.mongodb.casbah.gridfs.Imports._
import java.io.File
import java.io.FileInputStream
import com.mongodb.spark.config._
,代码段为:
val df = sparksessionobject.read.json("D:/split_json_part/part1_final/part-00000.json").toDF() //Small size file
val writeConfig = MongoSpark.save(df.write.mode("append"), WriteConfig(Map("collection" -> "play"), Some(WriteConfig(sparksessionobject))))
但问题已从此处开始:我们必须使用在MongoDB数据库中加载大文件。 我有一个2.2 GB的JSON,并且已加载到MongoDB中。
val mongoColl = MongoConnection("192.168.70.13", 27017)
//val mongoClient = MongoClient("192.168.70.13", 27017)
val db = mongoColl("issuer")
val gridFS = GridFS(db)
val imageFile = new File("D:/split_json_part/part1_final/part-00000.json")
val fileInputStream=new FileInputStream(imageFile)
val gfsFile=gridFS.createFile(fileInputStream)
gfsFile.filename="part-00000.json"
gfsFile.save()
文件已加载到数据库中,但是问题是我没有正确获取文档中的记录,数据以二进制形式出现,并且以后如何追加这些块?我不知道。
这是MongoDB数据库中2.2 GB fs.chunk
的视图。
Casbah API
如何解决此问题? 我已经参考了以下链接: