- nebula 版本:v1.2.1
- 部署方式(分布式):
- 是否为线上版本:Y
def batchWriteNebulaEdgedj(spark:SparkSession)={
val df = spark.read.json("src/main/resources/edge2")
df.show()
df.persist(StorageLevel.MEMORY_AND_DISK_SER)
new NebulaBatchWriterUtils().batchInsert("192.168.5.180:3699","nb",2000)
.batchToNebulaEdge(df,"dj","staff_id","ip","rank",policy = "hash")
}
edge2:{"staff_id":1,"ip":"ip1","log_time":"2021-06-01","rank":3}
边语句:
CREATE EDGE dj( log_time string,rank int);
以上输出结果rank为0,正确应该为3吧。求助
steam
2
你的查询语句不对,导入的时候指定了 rank,但是你查询的时候并没有指定 rank
rank的指定是指NebulaGraph的edge 四元组中的rank,你自己定义的边dj中rank是边的属性,而不是四元组中的rank。
你上面的代码是把rank作为四元组中rank了,而不是作为属性rank,实际生成的插入语句中是不会对rank这个属性做数据插入的。 你的rank属性默认值是0吧,所以查出来是0。
你需要把batchToNebulaEdge()中的rank去掉。
1 个赞
正确方法如下:
建边语句: CREATE EDGE dj( log_time string,rank int);
查询语句: GO FROM hash("1") OVER dj YIELD dj._src, dj._dst, dj._type, dj._rank
开贴时语句不用改变。
查询结果:
=====================================================================
| dj._src | dj._dst | dj._type | dj._rank |
=====================================================================
| -8286773200217731421 | -8141112217939915100 | 47 | 3 |
那你create edge中的rank属性就没有用了, 你查询用的_rank 不是属性rank,而是NebulaGraph 边数据四元组中的_rank。