在neo4j中保存页面排名输出

时间:2017-04-30 12:12:57

标签: scala neo4j spark-graphx

我正在运行Pregel Page rank算法 使用scala在Spark中使用Twitter数据。该算法运行正常,并给我输出正确找出最高页面排名得分。但是我无法在neo4j上保存图表。

输入和输出如下所述。

输入文件:(这些数字是推特用户ID)

86566510 15647839
86566510 197134784
86566510 183967095
15647839 11272122
15647839 10876852
197134784 34236703
183967095 20065583
11272122 197134784
34236703 18859819
20065583 91396874
20065583 86566510
20065583 63433165
20065583 29758446

图顶点的输出:

(11272122,0.75)
(34236703,1.0)
(10876852,0.75)
(18859819,1.0)
(15647839,0.6666666666666666)
(86566510,0.625)
(63433165,0.625)
(29758446,0.625)
(91396874,0.625)
(183967095,0.6666666666666666)
(197134784,1.1666666666666665)
(20065583,1.0)

使用下面的scala代码我尝试保存图表,但确实如此。请帮我解决这个问题。

Neo4jGraph.saveGraph(sc, pagerankGraph, nodeProp = "twitterId", relProp = "follows")

感谢。

1 个答案:

答案 0 :(得分:1)

您是否最初从Neo4j加载图表?目前saveGraph通过内部id将图形数据保存回Neo4j节点。

它实际上运行了这个陈述:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        EditText yourEditText = new EditText(this);
        layout.addView(yourEditText);

        builder.setView(layout);

        // Set up the buttons
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        final AlertDialog dialog = builder.create();

        dialog.show();

        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if ("".equals(yourEditText.getText().toString().trim())) {
                    //this will stop your dialog from closing
                    yourEditText.setError("This field is required!");
                    return;

                }

                //you logic here


                dialog.dismiss();

            }
        });

但作为短期缓解,我添加了可选的labelIdProp参数,用于代替内部id,以及匹配/合并标志。您必须自己构建库才能使用它。我将在接下来的几天推动更新。

您可以尝试的是UNWIND {data} as row MATCH (n) WHERE id(n) = row.id SET n.$nodeProp = row.value return count(*)

以下是测试代码。

您基本上拥有一个包含数据的数据框,并将其保存到Neo4j图表中(尽管包括关系)。

Neo4jDataFrame.mergeEdgeList