You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@madlib.apache.org by "Frank McQuillan (JIRA)" <ji...@apache.org> on 2018/10/03 21:39:00 UTC

[jira] [Closed] (MADLIB-1279) Missing node for graph in-out degrees

     [ https://issues.apache.org/jira/browse/MADLIB-1279?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Frank McQuillan closed MADLIB-1279.
-----------------------------------
    Resolution: Fixed

> Missing node for graph in-out degrees
> -------------------------------------
>
>                 Key: MADLIB-1279
>                 URL: https://issues.apache.org/jira/browse/MADLIB-1279
>             Project: Apache MADlib
>          Issue Type: Bug
>          Components: Module: Graph
>            Reporter: Frank McQuillan
>            Assignee: Rahul Iyer
>            Priority: Minor
>             Fix For: v1.15.1
>
>
> MADlib seems to consider destination-side vertex only. 
> If any vertex just exists in a source side and not in a destination side, 
> then such vertex has no result for 'In-Out Degree' ,
> with or without 'Grouping Columns'. 
> I've changed the example of 'edge' table in the user docs to show the bug. 
> (from (6, 7, 1.0)  ==> to (7, 6, 1.0))
> The vertex '7' will have outdegree '1' and indegree '0'. 
> madlib.graph_vertex_degrees() function with grouping column produces 'no id' for vertex '7'. 
> Create table:
> {code}
> DROP TABLE IF EXISTS vertex, edge;
> CREATE TABLE vertex(
>         id INTEGER,
>         name TEXT
>         );
> CREATE TABLE edge(
>         src_id INTEGER,
>         dest_id INTEGER,
>         edge_weight FLOAT8
>         );
> INSERT INTO vertex VALUES
> (0, 'A'),
> (1, 'B'),
> (2, 'C'),
> (3, 'D'),
> (4, 'E'),
> (5, 'F'),
> (6, 'G'),
> (7, 'H');
> INSERT INTO edge VALUES
> (0, 1, 1.0),
> (0, 2, 1.0),
> (0, 4, 10.0),
> (1, 2, 2.0),
> (1, 3, 10.0),
> (2, 3, 1.0),
> (2, 5, 1.0),
> (2, 6, 3.0),
> (3, 0, 1.0),
> (4, 0, -2.0),
> (5, 6, 1.0),
> (7, 6, 1.0);
> SELECT * FROM edge ORDER BY src_id, dest_id;
> {code}
> {code}
>  src_id | dest_id | edge_weight 
> --------+---------+-------------
>       0 |       1 |           1
>       0 |       2 |           1
>       0 |       4 |          10
>       1 |       2 |           2
>       1 |       3 |          10
>       2 |       3 |           1
>       2 |       5 |           1
>       2 |       6 |           3
>       3 |       0 |           1
>       4 |       0 |          -2
>       5 |       6 |           1
>       7 |       6 |           1
> (12 rows)
> {code}
> Create table with grouping:
> {code}
> DROP TABLE IF EXISTS edge_gr;
> CREATE TABLE edge_gr AS
> (
>   SELECT *, 0 AS grp FROM edge
>   UNION
>   SELECT *, 1 AS grp FROM edge WHERE src_id < 6 AND dest_id < 6
> );
> INSERT INTO edge_gr VALUES
> (4,5,-20,1);
> SELECT * FROM edge_gr ORDER BY grp, src_id, dest_id;
> {code}
> {code}
>  src_id | dest_id | edge_weight | grp 
> --------+---------+-------------+-----
>       0 |       1 |           1 |   0
>       0 |       2 |           1 |   0
>       0 |       4 |          10 |   0
>       1 |       2 |           2 |   0
>       1 |       3 |          10 |   0
>       2 |       3 |           1 |   0
>       2 |       5 |           1 |   0
>       2 |       6 |           3 |   0
>       3 |       0 |           1 |   0
>       4 |       0 |          -2 |   0
>       5 |       6 |           1 |   0
>       7 |       6 |           1 |   0
>       0 |       1 |           1 |   1
>       0 |       2 |           1 |   1
>       0 |       4 |          10 |   1
>       1 |       2 |           2 |   1
>       1 |       3 |          10 |   1
>       2 |       3 |           1 |   1
>       2 |       5 |           1 |   1
>       3 |       0 |           1 |   1
>       4 |       0 |          -2 |   1
>       4 |       5 |         -20 |   1
> (22 rows)
> {code}
> In-out degrees:
> {code}
> DROP TABLE IF EXISTS degrees;
> SELECT madlib.graph_vertex_degrees(
>     'vertex',      -- Vertex table
>     'id',          -- Vertix id column (NULL means use default naming)
>     'edge',        -- Edge table
>     'src=src_id, dest=dest_id, weight=edge_weight',
>     'degrees');    -- Output table of shortest paths
> SELECT * FROM degrees ORDER BY id;
> ```
> produces
> ```
>  id | indegree | outdegree 
> ----+----------+-----------
>   0 |        2 |         3
>   1 |        1 |         2
>   2 |        2 |         3
>   3 |        2 |         1
>   4 |        1 |         1
>   5 |        1 |         1
>   6 |        3 |         0
>     |        0 |         1
> (8 rows)
> {code}
> where id=7 is missing.
> Likewise with grouping:
> {code}
> DROP TABLE IF EXISTS out_gr;
> SELECT madlib.graph_vertex_degrees(
>     'vertex',      -- Vertex table
>     NULL,          -- Vertex id column (NULL means use default naming)
>     'edge_gr',     -- Edge table
>     'src=src_id, dest=dest_id, weight=edge_weight',
>     'out_gr',      -- Output table of shortest paths
>     'grp'          -- Grouping columns
> );
> SELECT * FROM out_gr ORDER BY grp, id;
> {code}
> produces
> {code}
>  grp | id | indegree | outdegree 
> -----+----+----------+-----------
>    0 |  0 |        2 |         3
>    0 |  1 |        1 |         2
>    0 |  2 |        2 |         3
>    0 |  3 |        2 |         1
>    0 |  4 |        1 |         1
>    0 |  5 |        1 |         1
>    0 |  6 |        3 |         0
>    0 |    |        0 |         1
>    1 |  0 |        2 |         3
>    1 |  1 |        1 |         2
>    1 |  2 |        2 |         2
>    1 |  3 |        2 |         1
>    1 |  4 |        1 |         2
>    1 |  5 |        2 |         0
> (14 rows)
> {code}
> where id=7 is missing.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)