如何用Gremlin实现顶点双属性组合计数的二维表展示?
问题描述
我拥有一组顶点,每个顶点包含name和job title两个属性。我希望统计这两个属性的所有组合的数量,并将结果以二维表形式呈现,示例如下:
| Programmer | Driver | |
|---|---|---|
| John | 3 | 56 |
| Peter | 0 | 8 |
请问能否通过Gremlin实现该需求?我尝试使用groupCount(),但不知如何让它适配两个属性。
实现方案
可以通过Gremlin的嵌套分组逻辑实现该需求,具体步骤如下:
基础双层分组统计
先按name做外层分组,再在每个name分组内按job title执行groupCount,即可得到每个姓名对应不同职位的数量:g.V().group().by('name').by(groupCount().by('job title'))执行后会返回嵌套Map结构的结果,示例如下:
{ "John": {"Programmer": 3, "Driver": 56}, "Peter": {"Driver": 8} }补全缺失职位的0值
如果需要像示例表格一样,显示所有存在的职位(包括对应姓名下数量为0的职位),可以先收集所有唯一的职位列表,再遍历统计结果补全缺失值:// 先获取所有不重复的职位 def allJobs = g.V().values('job title').dedup().toList() // 执行分组并补全0值 g.V().group().by('name').by( groupCount().by('job title').map{ allJobs.each{ job -> it.putIfAbsent(job, 0) }; it } )这样就能得到每个姓名对应所有职位的完整数量,包括数值为0的情况。
转换为二维表展示
Gremlin返回的是嵌套Map结构,你可以在客户端将该结果转换为二维表格式:提取所有姓名作为行标题,所有职位作为列标题,然后将Map中的对应数值填充到表格单元格中即可。
内容的提问来源于stack exchange,提问作者mrstone
相关产品推荐
相关产品推荐

