Ade*_*asa 4 csv scala apache-spark rdd spark-graphx
Spark我是和的新手Scala,我正在尝试执行一项简单的任务,即根据文本文件中的数据创建图形。
从文档中
https://spark.apache.org/docs/0.9.0/api/graphx/index.html#org.apache.spark.graphx.Graph $@fromEdges[VD,ED]%28RDD[Edge[ED]], VD%29%28ClassTag[VD],ClassTag[ED]%29:图表[VD,ED]
我可以看到我可以创建一个图表tuples of vertices。
我的简单文本文件如下所示,其中每个数字都是一个顶点:
v1 v3
v2 v1
v3 v4
v4
v5 v3
Run Code Online (Sandbox Code Playgroud)
当我从文件中读取数据时
val myVertices = myData.map(line=>line.split(" ")) 我得到一个 RDD[Array[String]]。
我的问题是:
如果这是解决问题的正确方法,我如何将其转换RDD[Array[String]]为正确的格式,根据文档是RDD[(VertexId, VertexId)](也VertexID必须是长类型,并且我正在使用字符串)
是否有另一种更简单的方法可以从类似的 csv 文件结构构建图表?
任何建议都将非常受欢迎。谢谢!
有多种方法可以从文本文件创建图形。
此代码从Graph.fromEdgeTuples方法创建一个图
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.graphx.GraphLoader
import scala.util.MurmurHash
import org.apache.spark.graphx.Graph
import org.apache.spark.rdd.RDD
import org.apache.spark.graphx.VertexId
object GraphFromFile {
def main(args: Array[String]) {
//create SparkContext
val sparkConf = new SparkConf().setAppName("GraphFromFile").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
// read your file
/*suppose your data is like
v1 v3
v2 v1
v3 v4
v4 v2
v5 v3
*/
val file = sc.textFile("src/main/resources/textFile1.csv");
// create edge RDD of type RDD[(VertexId, VertexId)]
val edgesRDD: RDD[(VertexId, VertexId)] = file.map(line => line.split(" "))
.map(line =>
(MurmurHash.stringHash(line(0).toString), MurmurHash.stringHash(line(1).toString)))
// create a graph
val graph = Graph.fromEdgeTuples(edgesRDD, 1)
// you can see your graph
graph.triplets.collect.foreach(println)
}
}
Run Code Online (Sandbox Code Playgroud)
使用MurmurHash.stringHash是因为文件包含 String 形式的顶点。如果它是数字类型,那么就不需要它。
| 归档时间: |
|
| 查看次数: |
6052 次 |
| 最近记录: |