我有一个文档集合,我想通过某个字段查询,按字段location对它们进行排序pos,并且只返回每个pos字段的最高值.
所以现在的查询看起来像这样:
$locations = array(1,2,3,4,5,6);
$results = $this->dm->createQueryBuilder('\App\Document\Test')
->select('id', 'word', 'pos','change', 'title', 'coll_at', 'location')
->field('location')->in($locations)
->sort('location', 'asc')
->sort('pos', 'asc')
->getQuery()->execute();
Run Code Online (Sandbox Code Playgroud)
但是因为location每个具有不同的特定条目可以有多个条目pos,所以我必须创建一个foreach循环来操作之后的数据.在这种情况下,我可以采用该快捷方式只是在返回数据后更改数据,但我还有其他情况,根本不能这样做.所以我创建了这个较小的场景,试图找出如何使用Doctrine ODM的group查询,甚至是映射和减少它.不确定最好的方法.我看到很多获得跑步总数等的例子.
那么我如何创建一个查询来获得pos每个特定字段中最高的数值location?知道可能存在多个具有相同location但不同pos值的文档.最重要的是,拥有我在上面列出的所选记录的所有字段->select()
我的映射器有一个输出:
Mapper: KEY, VALUE(Timestamp, someOtherAttrbibutes)
Run Code Online (Sandbox Code Playgroud)
我的减速机确实收到了:
Reducer: KEY, Iterable<VALUE(Timestamp, someOtherAttrbibutes)>
Run Code Online (Sandbox Code Playgroud)
我想Iterable<VALUE(Timestamp, someOtherAttrbibutes)>按Timestamp属性排序.有没有可能实现它?
我想避免在Reducer代码中手动排序.http://cornercases.wordpress.com/2011/08/18/hadoop-object-reuse-pitfall-all-my-reducer-values-are-the-same/
我将不得不从Iterable"深度复制"所有对象,这会导致巨大的内存开销.:(((
我正在使用eclipse导出map-reduce程序的jar文件.当我使用命令运行jar时
hadoop jar hadoop-prog.jar WordCount /home/temp/input /home/temp/output
Run Code Online (Sandbox Code Playgroud)
它总是显示错误:
Exception in thread "main" java.lang.ClassNotFoundException: WordCount
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我从互联网上获得了wordcount的示例jar文件,它运行得很顺利.
我无法弄清楚问题出在哪里.
我正在尝试以编程方式确定在将地图缩减作业提交到hadoop时,哪些任务尝试在我的群集中的哪个任务跟踪器上运行.我发现我可以从JobClient获取大部分任务数据,如下所示:
jobClient.getMapTaskReports(jobID)
但不是任务尝试成功的机器的主机名.有人知道如何从任务尝试ID中获取主机名吗?
我想使用lzo来压缩地图输出,但我无法运行它!我使用的Hadoop版本是0.20.2.我设置:
conf.set("mapred.compress.map.output", "true")
conf.set("mapred.map.output.compression.codec",
"org.apache.hadoop.io.compress.LzoCodec");
Run Code Online (Sandbox Code Playgroud)
当我在Hadoop中运行jar文件时,它显示一个无法写入地图输出的异常.
我必须安装lzo吗?使用lzo我该怎么办?
如何建立一个友情推荐系统,通过查看两个共有多少朋友,并使用mapreduce工作推荐他们作为朋友?有点像facebook或linkedin那样,显示推荐人的列表,并根据共同朋友的数量对它们进行排名.
我试图在hadoop中读取包含一些聚合数据的Excel文件.地图缩减程序似乎工作正常但输出产生的格式不可读.我需要在Hadoop中使用任何特殊的InputFormat读取器用于Excel文件Map Reduce?.我的配置如下
Configuration conf=getConf();
Job job=new Job(conf,"LatestWordCount");
job.setJarByClass(FlightDetailsCount.class);
Path input=new Path(args[0]);
Path output=new Path(args[1]);
FileInputFormat.setInputPaths(job, input);
FileOutputFormat.setOutputPath(job, output);
job.setMapperClass(MapClass.class);
job.setReducerClass(ReduceClass.class);
//job.setCombinerClass(ReduceClass.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
//job.setOutputKeyClass(Text.class);
//job.setOutputValueClass(Text.class);
System.exit(job.waitForCompletion(true)?0:1);
return 0;
Run Code Online (Sandbox Code Playgroud)
输出产品看起来像这样 KW O A ]n Ε r3 \n" p 6W jJ 9W f= 9ml dR y /Ք 7 ^ i M*Ք ^nz l ^ ) j ( dRͱ/7 TS* M//7 TS &jZoTSR7 @)oTӺ5{%+ۆw6- = E_}米)〜ʅ ژ :# j ] u >
我正在构建一个可以比作约会应用程序的应用程序.
我有一些像这样结构的文件:
$ db.profiles.find().pretty()
[
{
"_id": 1,
"firstName": "John",
"lastName": "Smith",
"fieldValues": [
"favouriteColour|red",
"food|pizza",
"food|chinese"
]
},
{
"_id": 2,
"firstName": "Sarah",
"lastName": "Jane",
"fieldValues": [
"favouriteColour|blue",
"food|pizza",
"food|mexican",
"pets|yes"
]
},
{
"_id": 3,
"firstName": "Rachel",
"lastName": "Jones",
"fieldValues": [
"food|pizza"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我正在努力识别在一个或多个上相互匹配的配置文件fieldValues.
所以,在上面的例子中,我理想的结果看起来像:
<some query>
result:
[
{
"_id": "507f1f77bcf86cd799439011",
"dateCreated": "2013-12-01",
"profiles": [
{
"_id": 1,
"firstName": "John",
"lastName": "Smith",
"fieldValues": [
"favouriteColour|red",
"food|pizza",
"food|chinese"
]
},
{
"_id": 2,
"firstName": …Run Code Online (Sandbox Code Playgroud) 我正在一个项目中使用underscorejs.我需要做不同类型的数组操作,如map,reduce,filter groupby.
我的数据集如下所示:
var data_list = [
{"insertDate": "2011-12-02T00:00","value": {"paisa":10000}},
{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":10000}
},{"insertDate": "2012-12-02T00:00","value": {"paisa":30000}},
{"insertDate": "2013-04-02T00:00","value": {"paisa":10000},
},{"insertDate": "2013-04-02T00:00","value": {"paisa":30000}
},{"insertDate": "2013-03-02T00:00","value": {"paisa":20000}},
{"insertDate": "2013-04-12T00:00","value": {"paisa":30000}
},
{"insertDate": "2012-11-02T00:00","value": {"paisa":10000}}
]
Run Code Online (Sandbox Code Playgroud)
我想根据日,月和年计算数据.对于日计算,我正在进行groupby,然后使用map reduce进行计算.如下所示:
var groupedByDateData = _.groupBy(data_list, "insertDate");
var aggregateByDate = _.map(groupedByDateData, function(invoiceObject, createdat) {
return {
createdat: createdat,
val: _.reduce(invoiceObject, function(m,x) {
return m + x.value.paisa;
}, 0)
};
});
Run Code Online (Sandbox Code Playgroud)
它适用于基于日期的地图减少,但对于月份和年份计算,我想以与代码可读相同的格式进行.
如何进行映射,减少使用下划线以便我可以获得如下数据:对于每月计算:
[{"createdat": "February 2011", "val": 10000},
{"createdat": "March 2013", "val": 40000},
{"createdat": "December …Run Code Online (Sandbox Code Playgroud) 运行映射器的节点处理如何知道它必须将一些键值输出发送到节点A(运行reducer),一些键值输出到节点B(运行另一个reducer)?是否存在由JobTracker维护的reducer节点列表?如果是,它如何选择节点来运行减速器?