我们可以将Spark GraphX图形数据导出到Titan Graph Database吗?

时间:2016-02-10 05:24:27

标签: scala apache-spark titan spark-graphx

我正在检查将Spark GraphX图导出到Titan图数据库的可行性。

***Used below code to construct graph in Spark GraphX and writing graph to a json file :***                     


    val conf = new SparkConf()
    val sc = new SparkContext(conf.setAppName("========= GraphXTest ======="))

    // Create an RDD for the vertices
    val users: RDD[(VertexId, (String, String))] = sc.parallelize(Array(
                                                    (3L, ("rxin", "student")),
                                                    (7L, ("jgonzal", "postdoc")),
                                                    (5L, ("franklin", "prof"))
                                                    ))
      // Create an RDD for edges                                                
     val relationships: RDD[Edge[String]] = sc.parallelize(Array(
                                                Edge(3L, 7L, "collab"),
                                                Edge(5L, 3L, "advisor")
                                                ))
     // Build the initial Graph                                         
     val graph = Graph(users, relationships)
     graph.vertices.saveAsTextFile("D://Spark-GraphX-vertices.json")

在运行上面的代码时,它会创建一个文件夹,其中包含我提到的名称 D://Spark-GraphX-vertices.json 以及其中的一些其他文件。但这些文件不包含任何数据。

如何将此Graph从Spark GraphX导出到Titan数据库?

1 个答案:

答案 0 :(得分:4)

您需要将您的数据转换为Titan的邻接列表格式才能读取它。您最好的选择是导出到文本文件并使用ScriptInputFormat来读取它。例如:

1:2,4,5,6
2:4,1,5
3:7,8,9,2

此格式表示顶点1连接到2,4,5和6.如果您的数据集很小(<1亿条边),那么只需循环浏览文件并使用OLTP API写入数据(并不是真的需要它以邻接列表格式,尽管这将是好的,因为至少有一个顶点将在缓存中)。如果您的数据集很大(数十亿个边缘),则需要使用BulkLoaderVertexProgram并将其批量加载到Titan中。以下是一些研究链接:

http://tinkerpop.apache.org/docs/3.1.0-incubating/#bulkloadervertexprogram

http://tinkerpop.apache.org/docs/3.1.0-incubating/#sparkgraphcomputer(有趣的是,您将使用Spark来批量加载图表)

http://tinkerpop.apache.org/docs/3.1.0-incubating/#script-io-format