分析引擎API参考¶
分析引擎¶
-
class GrapeEngine¶
GrapeEngine 负责组装并启动分析引擎的四个主要组件,包括 VineyardServer、GrapeInstance、Dispatcher 和 GraphScopeServer。
公共函数
-
inline GrapeEngine(std::string host, int port)¶
在服务模式下构建一个新的GrapeEngine对象,监听主机:端口以接收传入的RPC请求。
- Parameters:
host –
port –
-
inline explicit GrapeEngine(std::string dag_file)¶
在作业模式下构建一个新的GrapeEngine对象,处理dagfile中定义的工作流。
- Parameters:
dag_file –
-
inline void Start()¶
-
inline void Stop()¶
-
inline int RunDAGFile()¶
-
inline GrapeEngine(std::string host, int port)¶
-
class GrapeInstance : public gs::Subscriber¶
MPI管理。
该控制器初始化MPI通信环境,为每个进程分配一个等级。根据分配的等级,确定该进程是作为协调者还是工作者运行。它还负责执行来自协调者的命令。
-
class GSObject¶
GSObject 是 GraphScope 对象的基础类。所有由 ObjectManager 管理的对象都应继承 GSObject。
由以下类继承:gs::AppEntry, gs::IContextWrapper, gs::IFragmentWrapper, gs::Projector, gs::PropertyGraphUtils
-
class ObjectManager¶
ObjectManager 管理着诸如片段包装器、加载应用等 GSObject 对象。
-
class AnalyticalServer¶
AnalyticalServer 负责创建并启动gRPC服务。
-
struct EngineConfig¶
EngineConfig 包含关于分析引擎的配置,例如是否启用networkx功能、vineyard套接字以及vineyard RPC端点。
公共函数
-
inline std::string ToJsonString() const¶
-
inline std::string ToJsonString() const¶
-
class Dispatcher¶
调度器使用MPI向每个工作节点广播命令。
-
class DispatchResult¶
DispatchResult 封装了Python客户端的计算结果、元数据和错误信息。
公共类型
公共函数
-
DispatchResult() = default¶
-
inline explicit DispatchResult(int worker_id, rpc::Code error_code = rpc::Code::OK)¶
-
inline int worker_id() const¶
-
inline void set_error(rpc::Code error_code, const std::string &message)¶
-
inline rpc::Code error_code() const¶
-
inline std::string message()¶
-
inline bool has_large_data() const¶
-
inline void set_graph_def(const rpc::graph::GraphDefPb &graph_def, AggregatePolicy policy = AggregatePolicy::kMergeGraphDef)¶
设置图的元数据。所有工作节点之间的元数据应保持一致。
- Parameters:
graph_def –
-
inline const rpc::graph::GraphDefPb &graph_def() const¶
-
inline rpc::graph::GraphDefPb &graph_def()¶
-
inline void set_data(const std::string &data, AggregatePolicy policy = AggregatePolicy::kRequireConsistent, bool large_data = false)¶
-
inline void set_data(const grape::InArchive &arc, AggregatePolicy policy = AggregatePolicy::kRequireConsistent, bool large_data = false)¶
-
inline const std::string &data() const¶
-
inline AggregatePolicy aggregate_policy() const¶
-
DispatchResult() = default¶
GraphScope中的分片¶
-
template<typename FRAG_T>
class FragmentWrapper¶ 这是一个片段包装器,它提供了一系列方法来序列化/转换附加到片段的数据。提供了AddColumn方法用于添加属性,从而从原始片段创建新片段。
- Template Parameters:
FRAG_T –
-
template<typename OID_T, typename VID_T, typename VDATA_T, typename EDATA_T, typename VERTEX_MAP_T = vineyard::ArrowVertexMap<typename vineyard::InternalType<OID_T>::type, VID_T>, bool COMPACT = false>
class ArrowProjectedFragment : public gs::ArrowProjectedFragmentBase, public vineyard::BareRegistered<ArrowProjectedFragment<OID_T, VID_T, VDATA_T, EDATA_T, vineyard::ArrowVertexMap<typename vineyard::InternalType<OID_T>::type, VID_T>, false>>¶ 该类表示从ArrowFragment投影出的片段,仅包含一个顶点标签和边标签。该片段没有标签和属性。
- Template Parameters:
OID_T – OID类型
VID_T – VID类型
VDATA_T – 顶点关联的数据类型
EDATA_T – 边关联的数据类型
公共类型
-
using eid_t = vineyard::property_graph_types::EID_TYPE¶
-
using inner_vertices_t = vertex_range_t¶
-
using outer_vertices_t = vertex_range_t¶
-
using vertices_t = vertex_range_t¶
-
using sub_vertices_t = vertex_range_t¶
-
using const_adj_list_t = adj_list_t¶
-
using const_compact_adj_list_t = compact_adj_list_t¶
-
using property_vertex_map_t = VERTEX_MAP_T¶
-
using vertex_map_t = ArrowProjectedVertexMap<internal_oid_t, vid_t, property_vertex_map_t>¶
-
using label_id_t = vineyard::property_graph_types::LABEL_ID_TYPE¶
-
using prop_id_t = vineyard::property_graph_types::PROP_ID_TYPE¶
-
using property_graph_t = vineyard::ArrowFragment<oid_t, vid_t, property_vertex_map_t, COMPACT>¶
-
template<typename DATA_T>
using vertex_array_t = grape::VertexArray<vertices_t, DATA_T>¶
-
template<typename DATA_T>
using inner_vertex_array_t = grape::VertexArray<inner_vertices_t, DATA_T>¶
-
template<typename DATA_T>
using outer_vertex_array_t = grape::VertexArray<outer_vertices_t, DATA_T>¶
公共函数
-
inline ~ArrowProjectedFragment()¶
-
inline void Construct(const vineyard::ObjectMeta &meta) override¶
-
inline void PrepareToRunApp(const grape::CommSpec &comm_spec, grape::PrepareConf conf)¶
-
inline fid_t fid() const¶
-
inline fid_t fnum() const¶
-
inline label_id_t vertex_label() const¶
-
inline label_id_t edge_label() const¶
-
inline vertex_range_t Vertices() const¶
-
inline vertex_range_t InnerVertices() const¶
-
inline vertex_range_t OuterVertices() const¶
-
inline vertex_range_t OuterVertices(fid_t fid) const¶
-
inline internal_oid_t GetInternalId(const vertex_t &v) const¶
-
inline arrow_projected_fragment_impl::TypedArray<VDATA_T>::value_type GetData(const vertex_t &v) const¶
-
inline size_t GetEdgeNum() const¶
-
inline size_t GetInEdgeNum() const¶
-
inline size_t GetOutEdgeNum() const¶
-
inline size_t GetOutgoingEdgeNum() const¶
-
inline size_t GetIncomingEdgeNum() const¶
-
inline size_t GetTotalVerticesNum() const¶
-
inline internal_oid_t GetInnerVertexInternalId(const vertex_t &v) const¶
-
inline internal_oid_t GetOuterVertexInternalId(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<COMPACT_, compact_adj_list_t>::type GetIncomingAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<COMPACT_, compact_adj_list_t>::type GetOutgoingAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingInnerVertexAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingInnerVertexAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingOuterVertexAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingOuterVertexAdjList(const vertex_t &v) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingAdjList(const vertex_t &v, fid_t src_fid) const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingAdjList(const vertex_t &v, fid_t dst_fid) const¶
-
inline size_t IEDestsSize() const¶
-
inline size_t OEDestsSize() const¶
-
inline size_t IOEDestsSize() const¶
-
inline std::shared_ptr<vertex_map_t> GetVertexMap()¶
-
inline const std::shared_ptr<vertex_map_t> GetVertexMap() const¶
-
inline bool directed() const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, const nbr_unit_t*>::type get_out_edges_ptr() const¶
-
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, const nbr_unit_t*>::type get_in_edges_ptr() const¶
-
inline const int64_t *get_oe_offsets_begin_ptr() const¶
-
inline const int64_t *get_oe_offsets_end_ptr() const¶
-
inline const int64_t *get_ie_offsets_begin_ptr() const¶
-
inline const int64_t *get_ie_offsets_end_ptr() const¶
-
inline std::shared_ptr<vineyard::ArrowFragment<oid_t, vid_t, property_vertex_map_t, COMPACT>> get_arrow_fragment()¶
-
inline vineyard::ObjectID vertex_map_id() const¶
-
inline bool local_vertex_map() const¶
-
inline bool compact_edges() const¶
-
inline bool use_perfect_hash() const¶
公共静态属性
-
static constexpr grape::LoadStrategy load_strategy = grape::LoadStrategy::kBothOutIn¶
-
template<typename OID_T, typename VID_T, typename VERTEX_MAP_T = vineyard::ArrowVertexMap<OID_T, VID_T>>
class ArrowProjectedVertexMap : public vineyard::Registered<ArrowProjectedVertexMap<OID_T, VID_T, vineyard::ArrowVertexMap<OID_T, VID_T>>>¶ 该类表示oid与vid之间的映射关系。
- Template Parameters:
OID_T – OID类型
VID_T – VID类型
公共函数
-
inline void Construct(const vineyard::ObjectMeta &meta)¶
-
inline bool GetOid(vid_t gid, oid_t &oid) const¶
-
inline bool GetGid(fid_t fid, oid_t oid, vid_t &gid) const¶
-
inline bool GetGid(oid_t oid, vid_t &gid) const¶
-
inline vid_t Offset2Lid(const vid_t &offset)¶
-
inline vid_t GetOffsetFromLid(vid_t lid)¶
-
inline size_t GetTotalVerticesNum() const¶
-
inline fid_t GetFidFromGid(vid_t gid) const¶
-
inline bool use_perfect_hash() const¶
-
template<typename OID_T = vineyard::property_graph_types::OID_TYPE, typename VID_T = vineyard::property_graph_types::VID_TYPE, template<typename OID_T_ = typename vineyard::InternalType<OID_T>::type, typename VID_T_ = VID_T> class VERTEX_MAP_T = vineyard::ArrowVertexMap>
class ArrowFragmentLoader : public vineyard::ArrowFragmentLoader<vineyard::property_graph_types::OID_TYPE, vineyard::property_graph_types::VID_TYPE>¶ 该加载器可以从包括本地文件、oss、numpy、pandas和vineyard在内的数据源加载ArrowFragment。
- Template Parameters:
OID_T – OID 类型
VID_T – VID类型
公共函数
-
inline ArrowFragmentLoader(vineyard::Client &client, const grape::CommSpec &comm_spec, const std::vector<std::string> &efiles, const std::vector<std::string> &vfiles, bool directed = true, bool generate_eid = false, bool retain_oid = false, bool compact_edges = false, bool use_perfect_hash = false)¶
-
~ArrowFragmentLoader() = default¶
-
inline boost::leaf::result<std::pair<table_vec_t, std::vector<table_vec_t>>> LoadVertexEdgeTables()¶
-
inline bl::result<table_vec_t> LoadVertexTables()¶
-
inline bl::result<std::vector<table_vec_t>> LoadEdgeTables()¶
-
inline boost::leaf::result<vineyard::ObjectID> LoadFragment()¶
-
inline boost::leaf::result<vineyard::ObjectID> LoadFragmentAsFragmentGroup()¶
-
inline bl::result<vineyard::ObjectID> AddLabelsToFragment(vineyard::ObjectID frag_id)¶
-
inline bl::result<vineyard::ObjectID> AddDataToExistedVLabel(vineyard::ObjectID frag_id, label_id_t label_id)¶
-
inline bl::result<vineyard::ObjectID> AddDataToExistedELabel(vineyard::ObjectID frag_id, label_id_t label_id)¶
-
inline boost::leaf::result<vineyard::ObjectID> AddLabelsToFragmentAsFragmentGroup(vineyard::ObjectID frag_id)¶
-
inline bl::result<vineyard::ObjectID> ExtendLabelData(vineyard::ObjectID frag_id, int extend_type)¶
-
inline bl::result<void> initPartitioner()¶
警告
doxygenclass: 在目录 /home/runner/work/GraphScope/GraphScope/docs/_build/doxygen/xml 下的GraphScope项目的doxygen xml输出中找不到类"gs::ArrowFragmentAppender"
分析应用¶
-
template<typename FRAG_T, typename CONTEXT_T>
class AppBase¶ AppBase 是应用程序的基类。
它包含一个grape::DefaultMessageManager用于在应用程序执行期间处理消息。从该类派生的应用需要显式处理消息。
- Template Parameters:
FRAG_T – 片段类
CONTEXT_T – 应用上下文类
公共类型
-
using message_manager_t = grape::DefaultMessageManager¶
公共函数
-
AppBase() = default¶
-
virtual ~AppBase() = default¶
-
virtual void PEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0¶
待实现的部分评估。
注意
: 这个纯虚函数作为接口使用,指导用户在具体应用中实现。继承应用中的PEval将直接调用,而非通过虚函数机制。
- Parameters:
graph –
context –
messages –
-
virtual void IncEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0¶
增量评估待实现。
注意
: 这个纯虚函数作为接口使用,指导用户在具体应用中实现。继承应用中的IncEval将被直接调用,而非通过虚函数机制。
- Parameters:
graph –
context –
messages –
-
template<typename FRAG_T, typename CONTEXT_T>
class PropertyAppBase¶ PropertyAppBase 是属性图应用程序的基类。
它包含一个PropertyMessageManager(属性消息管理器)用于在应用执行期间处理消息。继承自该类的应用需要显式处理消息。
- Template Parameters:
FRAG_T –
CONTEXT_T –
公共类型
-
using message_manager_t = PropertyMessageManager¶
公共函数
-
PropertyAppBase() = default¶
-
virtual ~PropertyAppBase() = default¶
-
virtual void PEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0¶
待实现的部分评估。
注意
: 这个纯虚函数作为接口使用,指导用户在具体应用中实现。继承应用中的PEval将直接调用,而非通过虚函数机制。
- Parameters:
graph –
context –
messages –
-
virtual void IncEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0¶
增量评估待实现。
注意
: 这个纯虚函数作为接口使用,指导用户在具体应用中实现。继承应用中的IncEval将被直接调用,而非通过虚函数。
- Parameters:
graph –
context –
messages –
-
template<typename FRAG_T, typename CONTEXT_T>
class PropertyAutoAppBase¶ PropertyAutoAppBase 是属性图应用程序的基类,它通过 PropertyAutoMessageManager 来处理应用程序执行过程中的消息。继承自该类的应用程序无需显式处理消息。
- Template Parameters:
FRAG_T –
CONTEXT_T –
-
template<typename APP_T>
class DefaultWorker¶ DefaultWorker管理计算周期。DefaultWorker是一种针对从AppBase派生的应用程序的串行工作器。
- Template Parameters:
APP_T –
公共类型
-
using message_manager_t = grape::DefaultMessageManager¶
-
template<typename APP_T>
class ParallelPropertyWorker¶ 用于标记片段的并行工作器。
- Template Parameters:
APP_T –
公共类型
-
using message_manager_t = ParallelPropertyMessageManager¶
-
template<typename APP_T>
class PropertyAutoWorker¶ Worker负责管理计算周期。PropertyAutoWorker是一种用于从PropertyAutoAppBase派生的应用程序的工作器。
- Template Parameters:
APP_T –
公共类型
-
class AppEntry : public gs::GSObject¶
AppEntry 是一个管理应用程序的类。
AppEntry 包含一组用于操作AppFrame的函数指针,例如gs::CreateWorker、DeleteWorker和Query。在使用前必须调用Init方法加载库。
-
template<class FunctionType>
struct ArgsNum¶
-
template<typename T>
struct ArgsUnpacker¶ ArgsUnpacker 是一个用于将Any类型的proto解包为C++数据类型的工具。
- Template Parameters:
T – 目标类型
-
template<std::size_t index, class FunctionType>
struct ArgTypeAt¶
分析工作节点¶
-
template<typename APP_T>
class DefaultWorker DefaultWorker管理计算周期。DefaultWorker是一种串行工作器,适用于从AppBase派生的应用程序。
- Template Parameters:
APP_T –
公共类型
-
using fragment_t = typename APP_T::fragment_t
-
using context_t = typename APP_T::context_t
-
using message_manager_t = grape::DefaultMessageManager
公共函数
-
inline DefaultWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
-
~DefaultWorker() = default
-
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
-
inline void Finalize()
-
template<class ...Args>
inline void Query(参数&&... args)
-
inline std::shared_ptr<context_t> GetContext()
-
inline void Output(std::ostream &os)
-
template<typename APP_T>
class DefaultPropertyWorker¶ Worker负责管理计算周期。DefaultPropertyWorker是一种用于从AppBase派生的应用程序的工作器。
- Template Parameters:
APP_T –
公共类型
-
using message_manager_t = PropertyMessageManager¶
-
template<typename APP_T>
class ParallelPropertyWorker 用于标记片段的并行工作器。
- Template Parameters:
APP_T –
公共类型
-
using fragment_t = typename APP_T::fragment_t
-
using context_t = typename APP_T::context_t
-
using message_manager_t = ParallelPropertyMessageManager
公共函数
-
inline ParallelPropertyWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
-
virtual ~ParallelPropertyWorker() = default
-
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
-
inline void Finalize()
-
template<class ...Args>
inline void Query(参数&&... args)
-
inline std::shared_ptr<context_t> GetContext()
-
inline void Output(std::ostream &os)
-
template<typename APP_T>
class PropertyAutoWorker Worker负责管理计算周期。PropertyAutoWorker是一种用于从PropertyAutoAppBase派生的应用程序的工作器。
- Template Parameters:
APP_T –
公共类型
-
using fragment_t = typename APP_T::fragment_t
-
using context_t = typename APP_T::context_t
-
using message_manager_t = PropertyAutoMessageManager<typename APP_T::fragment_t>
公共函数
-
inline PropertyAutoWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
-
~PropertyAutoWorker() = default
-
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
-
inline void Finalize()
-
template<class ...Args>
inline void Query(参数&&... args)
-
inline std::shared_ptr<context_t> GetContext()
-
inline void Output(std::ostream &os)
应用上下文¶
-
template<typename CTX_T, typename = void>
struct CtxWrapperBuilder¶ 这是一个用于构建各种ContextWrapper实例的工具。
- Template Parameters:
CTX_T –
-
template<typename FRAG_T>
class VertexPropertyContext : public ContextBase¶ VertexPropertyContext 可以容纳任意数量的列。该上下文专为带标签的片段 - ArrowFragment 设计。与 LabeledVertexDataContext 相比,其数据类型和列数可以在运行时确定。
- Template Parameters:
FRAG_T – 片段类(仅限无标签片段)
公共类型
-
using vertex_t = typename fragment_t::vertex_t¶
-
using prop_id_t = vineyard::property_graph_types::PROP_ID_TYPE¶
-
using oid_t = typename fragment_t::oid_t¶
公共函数
-
inline explicit VertexPropertyContext(const fragment_t &fragment)¶
-
inline const fragment_t &fragment()¶
-
inline int64_t add_column(const std::string &name, ContextDataType type)¶
-
inline std::shared_ptr<IColumn> get_column(int64_t index)¶
-
inline std::shared_ptr<IColumn> get_column(const std::string &name)¶
-
inline std::vector<std::shared_ptr<IColumn>> &vertex_properties()¶
-
inline const std::map<std::string, std::shared_ptr<IColumn>> &properties_map()¶
-
template<typename FRAG_T, typename DATA_T>
class VertexDataContextWrapper : public gs::IVertexDataContextWrapper¶ 这是VertexDataContext的包装类。提供了一系列方法来转换上下文所持有的数据。
- Template Parameters:
FRAG_T – 片段类(仅限无标签片段)
DATA_T – 上下文所持有的数据类型
公共函数
-
inline virtual std::string context_type() override¶
-
inline virtual std::shared_ptr<IFragmentWrapper> fragment_wrapper() override¶
-
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToNdArray(const grape::CommSpec &comm_spec, const Selector &selector, const std::pair<std::string, std::string> &range) override¶
-
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToDataframe(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors, const std::pair<std::string, std::string> &range) override¶
-
inline virtual bl::result<vineyard::ObjectID> ToVineyardTensor(const grape::CommSpec &comm_spec, vineyard::Client &client, const Selector &selector, const std::pair<std::string, std::string> &range) override¶
-
inline virtual bl::result<vineyard::ObjectID> ToVineyardDataframe(const grape::CommSpec &comm_spec, vineyard::Client &client, const std::vector<std::pair<std::string, Selector>> &selectors, const std::pair<std::string, std::string> &range) override¶
-
inline virtual bl::result<std::vector<std::pair<std::string, std::shared_ptr<arrow::Array>>>> ToArrowArrays(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors) override¶
-
template<typename FRAG_T, typename DATA_T>
class TensorContext : public ContextBase¶ TensorContext 用于保存一系列计算结果。当元素数量与顶点数量无关时,应使用 TensorContext。
- Template Parameters:
FRAG_T –
DATA_T –
-
template<typename FRAG_T, typename DATA_T, typename = void>
class TensorContextWrapper : public gs::ITensorContextWrapper¶ TensorContextWrapper 是 TensorContext 的包装类。
- Template Parameters:
FRAG_T –
DATA_T –
公共函数
-
inline virtual std::string context_type() override¶
-
inline virtual std::shared_ptr<IFragmentWrapper> fragment_wrapper() override¶
-
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToNdArray(const grape::CommSpec &comm_spec, uint32_t axis) override¶
-
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToDataframe(const grape::CommSpec &comm_spec) override¶
-
inline virtual bl::result<vineyard::ObjectID> ToVineyardTensor(const grape::CommSpec &comm_spec, vineyard::Client &client, uint32_t axis) override¶
-
inline virtual bl::result<vineyard::ObjectID> ToVineyardDataframe(const grape::CommSpec &comm_spec, vineyard::Client &client) override¶
-
inline virtual bl::result<std::vector<std::pair<std::string, std::shared_ptr<arrow::Array>>>> ToArrowArrays(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors) override¶