извлечение столбца идентификатора гремлина — СКЛЕИВАНИЕ

#python #gremlin #aws-glue #amazon-neptune

#python #гремлин #aws-склеивание #amazon-нептун

Вопрос:

Я пытаюсь извлечь вершины базы данных Neptune в файл CSV, который не извлекается из столбца id. Ниже приведен скрипт, который я пытаюсь запустить в консоли AWS GLUE.

 import boto3
import os
import sys
import site
import json
import pandas as pd
from setuptools.command import easy_install
from importlib import reload

s3 = boto3.client('s3')
dir_path = os.path.dirname(os.path.realpath(__file__))
#os.path.dirname(sys.modules['__main__'].__file__)

install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "gremlinpython"] )

reload(site)

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.process.traversal import T
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

graph = Graph()

remoteConn = DriverRemoteConnection('wss://neptune-test-new-reader-1.c3nqs7vjaggx.eu-west-1.neptune.amazonaws.com:8182/gremlin','g')
g = graph.traversal().withRemote(remoteConn)

vertices_columns = ['id', 'label', 'region','country']
vertices = g.V().hasLabel('airport').limit(2).project('id','label','region','country').by('T.id').by('T.label').by('region').by('country').select(values).fold()
for v in vertices:
    print(v)
  

Ошибка:
Имя «Значения» не определено

Попробовал приведенный ниже скрипт с циклом for

 import boto3
import os
import sys
import site
import json
import pandas as pd
from setuptools.command import easy_install
from importlib import reload

s3 = boto3.client('s3')
dir_path = os.path.dirname(os.path.realpath(__file__))
#os.path.dirname(sys.modules['__main__'].__file__)

install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "gremlinpython"] )

reload(site)

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.process.traversal import T
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

graph = Graph()

remoteConn = DriverRemoteConnection('wss://neptune-test-new-reader-1.c3nqs7vjaggx.eu-west-1.neptune.amazonaws.com:8182/gremlin','g')
g = graph.traversal().withRemote(remoteConn)

vertices_columns = ['id', 'label', 'region','country']

"""
vertices = g.V().hasLabel('airport').limit(2).project('id','label','region','country').by('T.id').by('T.label').by('region').by('country').select(values).fold()
for v in vertices:
    print(v)
"""
#vertices = []
vertices = g.V().limit(1).valueMap(True).toList()
for v in vertices:
    print(v)
    for col in vertices_columns:
        print(v[col])
    #print(vertices)
  

Ошибка:

Вывод ключа print(v) {T.id:1:’1′,T.label:1:’аэропорт’,’страна’:’США’,’регион’: ‘США-AL’} Ошибка ключа: идентификатор

Ответ №1:

values Ключевое слово, используемое в select(values) , является ссылкой на перечисление, определенное как часть Column . В вашем коде вы можете использовать select(Column.values) и включать определение с помощью :

  from gremlin_python.process.traversal import Column
  

Вот пример Python:

 >>> g.V('3').project('id','label','code').by(T.id).by(T.label).by('code').toList()
[{'id': '3', 'label': 'airport', 'code': 'AUS'}]

>>> g.V('3').project('id','label','code').by(T.id).by(T.label).by('code').select(Column.values).toList()
[['3', 'airport', 'AUS']]
  

Обратите внимание, что T.id и T.label не заключены в кавычки.