官方ConnectorWriterExample 1.2.1 如何指定rank

  • 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吧。求助

你的查询语句不对,导入的时候指定了 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。

好的。收到。感谢。