2016-12-16 2 views
1

J'ai un fichier avec des valeurs srcId -> dstId qui représentent les bords d'un graphique que je charge avec GraphLoader edgeListFile, la source représente les utilisateurs et les éléments de destination , dans certains cas le srcId et le dstId sont égaux donc il y a des erreurs dans certains algorithmes comme quand je veux collecter le voisin de chaque sommet. Puis-je faire quelque chose pour séparer les utilisateurs des éléments et ne pas perdre d'informations?Apache Spark Graphx: Source et Destination partager la honte VertexId mais représenter différentes choses

Répondre

0

Chaque sommet GraphX ​​doit être défini par une valeur longue unique. Si les identifiants de source et de destination représentent des choses différentes, vous devez les transformer avec une opération pour vous assurer qu'ils sont distincts. Par exemple, en supposant que vous avez lu vos données dans un RDD[(Long, Long)], vous pouvez faire:

import org.apache.spark.rdd.RDD 
import org.apache.spark.graphx.{Edge, Graph} 

val userMaxID = rdd.map(_._1).distinct.max 
val edges: RDD[Edge[Int]] = rdd.map { 
    case (userID, itemID) => Edge(userID, itemID + userMaxID, 0) 
} 

val g = Graph.fromEdges(edges, 0) 

Ensuite, vous aurez un graphique où tous les ID d'article sera leur carte d'identité d'origine + l'ID maximale d'un utilisateur (si les ID peuvent être 0, vous devez ajouter un 1).

Notez qu'il ne s'agit que d'une suggestion, l'idée est que vous devez transformer vos ID de telle sorte qu'aucun élément ne puisse avoir le même ID qu'un utilisateur. Aussi, vous pouvez vouloir garder un moyen de savoir si un sommet donné est un utilisateur ou un élément; dans ma suggestion, tous les sommets avec l'ID < = userMaxID seraient des utilisateurs, alors que tous les sommets avec ID>userMaxID seraient des éléments.

+1

C'est ce que j'ai trouvé aussi, mais pour les ID d'élément je les ai changés avec leurs valeurs négatives, par exemple avant que j'avais 1 -> 1 et maintenant j'ai 1 -> -1, Graphx permet des vertex id. – user3224454

+0

@ user3224454 C'est une bonne solution! Je ne savais pas que GraphX ​​permettait des identifiants négatifs, c'est bon à savoir. –