我已经将我的 gremlin-csv 格式的数据上传到 S3 并最终从糟糕的 AWS 文档中弄清楚了如何通过 Python Jupyter 运行加载器 gremlin 脚本,但是当节点数据完全加载到图中时,边缘数据不是,但没有错误。
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
graph = Graph()
url = 'wss://<<cluster>>.<<region>>.neptune.amazonaws.com:<<port>>/gremlin'
remoteConn = DriverRemoteConnection(url,'g')
g = graph.traversal().withRemote(DriverRemoteConnection(url,'g'))
remoteConn.close()
这会创建一个空的图形对象,所以现在我使用以下方法将数据加载到其中:
import requests
import json
url="https://<<cluster>>.<<region>>.neptune.amazonaws.com:<<port>>/loader"
data = {
"source" : "s3://neptune-data/neptuneEdgeData.csv",
"format" : "csv",
"iamRoleArn" : "arn:aws:iam::<<###>>:role/NeptuneLoadFromS3",
"region" : "<<region>>",
"failOnError" : "FALSE",
"parallelism" : "MEDIUM"
}
headers={'Content-Type': 'application/json'}
res = requests.post(url, data=json.dumps(data), headers=headers)
这适用于节点数据,但 EdgeData 文件没有完全加载。一个原因可能是 EdgeData 文件为 455 Mb。AWS Neptune 限制页面上有一条含糊不清的注释:
Gremlin 和 SPARQL HTTP 请求的总大小必须小于 150 MB。如果请求超过此大小,Neptune 将返回 HTTP 400:BadRequestException。
我没有得到BadRequestException
(即使我设置failOnError
为TRUE
),但由于大小/时间限制,它可能只加载约 1/3 的数据。
有人真的知道为什么会发生这种情况以及如何加载完整的边缘数据吗?