Spark-connector相关问题

  • nebula 版本:2.5.1
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否为线上版本: N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述

您好 请教一个问题
这边使用的Spark Connector相关例子代码入下(Nebula官网给出的):

我这边用java实现的方式为:

图中vertexData为Spark读入的DataFrame
image

我的理解是这段代码是将图中vertexData批量写进Nebula中
但请问这是已经通过Spark分布式的方式写入了嘛?就是你们这个内部已经封装好了吗?
还是说这个writeVertices函数还是只是非分布式写入,如果我要是对vertexData进行分布式写入,我还是需要自己写类似:
vertexData.foreachPartition(图中的insertVertexes函数)
就是把vertexData手动分开并分别执行writeVertices函数呢?

谢谢

内部已经是并发写入了, 写入的并发度是你的vertexData 这个DataFrame的分区数和分配的cores的较小者。

内部封装实现可以从这个里面简单了解下。

谢谢指导 请教下
现在我有个逻辑是写800多个实体到图里


insertVertexes实现如下

在spark任务跑的时候 却好像没有并发
image

我看spark日志有这么一行


这个是没有并发写入的原因嘛

这个Dataset的分区数是要我自己定吧 分区多了 会不会写入的速度就能提升了呢?

源数据的分区数是你的vertexData 这个数据集的分区数, 执行的并发度就是根据这个数据集的分区数和你提交任务分配的cores数来确定的。 一般如果你是读取的本地文件,分区默认是1。

你如果是本地local提交,可以设定分区数为8 :vertexData.repartition(8).
设定master为"local[8]"

谢谢,请问下 800个点(也就四个属性)批插入时间大概6秒左右 算慢吗

Spark 任务启动与分配资源也需要一段时间,所以6秒比较合理吧。