[英]Create and append data to spark graphx java
我将Java对象Transaction(对象买方,对象交易者,付款的Int)放入Java Spark应用程序中,我想制作一个图(带有graphx),其中Vertex是买方和交易者,并且支付是边。 此外,如何添加另一个传入交易?
您可以通过提供所需的vertices
和edges
手动构建图形:
JavaRDD<Tuple2<Long, String>> vertices = sc.parallelize(new
Lists.newArrayList({
Tuple2(1L, "one"), Tuple2(2L, "two"),
Tuple2(3L, "three"), Tuple2(4L, "four")})
);
JavaRDD<Edge> relationships =
sc.parallelize(Lists.newArrayList({
Edge(1L, 2L, 1.0), Edge(1L, 4L, 2.0),
Edge(2L, 4L, 3.0), Edge(3L, 1L, 1.0),
Edge(3L, 4L, 5.0)}
);
Graph(relationships, vertices, StorageLevel.MEMORY_ONLY(), StorageLevel.MEMORY_ONLY(), stringTag, stringTag);
此外,您可以将这种方法应用于CSV
, TSV
或任何方便的文件格式。
如果要使用Dataframe API
进行图形数据处理,则绝对应该看一下GraphFrames 。
UPD
导入Graph
类:
import org.apache.spark.graphx.Graph
图的类型是顶点和边类型Graph<VD,ED>
因此您可以使用顶点,边,存储级别和类型标签来初始化此类-Scala中Java API的要求是,您只能指定顶点和边。
System.setProperty("hadoop.home.dir", "C:\\softwares\\Winutils");
SparkConf conf = new SparkConf().setMaster("local").setAppName("graph");
JavaSparkContext javaSparkContext = new JavaSparkContext(conf);
ClassTag<String> stringTag = scala.reflect.ClassTag$.MODULE$.apply(String.class);
List<Edge<String>> edges = new ArrayList<>();
edges.add(new Edge<String>(1, 2, "Friend1"));
edges.add(new Edge<String>(2, 3, "Friend2"));
edges.add(new Edge<String>(1, 3, "Friend3"));
edges.add(new Edge<String>(4, 3, "Friend4"));
edges.add(new Edge<String>(4, 5, "Friend5"));
edges.add(new Edge<String>(2, 5, "Friend6"));
JavaRDD<Edge<String>> edgeRDD = javaSparkContext.parallelize(edges);
Graph<String, String> graph = Graph.fromEdges(edgeRDD.rdd(), "",StorageLevel.MEMORY_ONLY(), StorageLevel.MEMORY_ONLY(), stringTag, stringTag);
graph.vertices().toJavaRDD().collect().forEach(System.out::println);
Apache Spark RDD不适用于细粒度的更新。 RDD上的所有操作都与更改整个RDD有关。 如果您有较大的更新操作图,则由于频繁的随机操作会导致大量内存消耗。 但是,如果您不希望频繁地重建图,则可以简单地从先前的Graph实例复制顶点/边,并向其添加更新。 如果您的用例是频繁的数据更新,则最好使用另一种方法-在数据库端处理更新:如果需要将图形存储在数据库中,则Cassandra
和HBase
专为强大的插入/更新操作而设计-考虑使用Neo4J
。
您可以将上述NoSQL DB的用法与Spark GraphX结合使用-通过调度程序通过Spark SQL
数据提取到Graph
,一些信号,来自Kafka的消息等,然后进一步加载到Graph
和必要的处理(我有此步骤的示例使用Scala最受欢迎的算法,使用Java就不难了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.