在 mongo 聚合框架中可以使用选项{allowDiskUse:true}
。这在一些无法在内存中执行的繁重操作(例如排序)时非常有用。
我正在尝试对createView
(在 Mongo 3.4 中可用)做同样的事情,但我找不到allowDiskUse
可以引入的地方。
在正常的聚合框架中:
db.mydb.aggregate([....,{$sort:{"a":-1}}],{allowDiskUse:true})
Run Code Online (Sandbox Code Playgroud)
有效,但是:
db.createView("newview","mydb",[....,{$sort:{"a":-1}}],{allowDiskUse:true})
Run Code Online (Sandbox Code Playgroud)
产生错误
The field 'allowDiskUse' is not a valid collection option.
Run Code Online (Sandbox Code Playgroud)
当然,我可以删除{allowDiskUse:true}
. 然后创建视图,但是当我尝试时:
> db.newview.find()
Error: error: {
"ok" : 0,
"errmsg" : "Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.",
"code" : 16819,
"codeName" : "Location16819"
}
Run Code Online (Sandbox Code Playgroud)
如何创建包含大型操作的视图?
我有一个带有这种结构的小文件“naivebayestest.txt”
10 1:1
20 1:2
20 1:2
Run Code Online (Sandbox Code Playgroud)
从这些数据中,我试图对向量 (1) 进行分类。如果我正确理解贝叶斯,则 (1) 的标签应该是 10(概率为 1!)。Spark MLlib 中的程序:
String path = "/usr/local/spark/data/mllib/bayestest.txt";
JavaRDD<LabeledPoint> training = MLUtils.loadLibSVMFile(jsc.sc(), path).toJavaRDD();
final NaiveBayesModel model = NaiveBayes.train(training.rdd());
Vector v = Vectors.dense(1);
double prediccion = model.predict(v);
System.out.println("Vector: "+v+" prediction: "+prediccion);
Run Code Online (Sandbox Code Playgroud)
显示 Vector: [1.0] prediction: 20.0
我用 1050 个元素的训练集获得了相同的结果,形式的 350 (1/3)10 1:1
和其余的20 1:2
(2/3),我仍然得到相同的预测 20.0 向量 1。
我究竟做错了什么?
我在尝试时遇到此错误
db.any.aggregate([
{ "$project": { n: {$gte: 0}} }
])
Run Code Online (Sandbox Code Playgroud)
我肯定必须是明显的东西,但我找不到错误.从shell客户端使用mongo 3.4
从列表中创建JavaRDD的常用方法是使用 JavaSparkContext.parallelize(List)
但是,Spark 2.0 SparkSession
用作入口点,我不知道如何从List创建JavaRDD