Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用Spark GraphX时出现INT/LONG转换的奇怪错误_Scala_Apache Spark_Spark Graphx - Fatal编程技术网

Scala 使用Spark GraphX时出现INT/LONG转换的奇怪错误

Scala 使用Spark GraphX时出现INT/LONG转换的奇怪错误,scala,apache-spark,spark-graphx,Scala,Apache Spark,Spark Graphx,这里是Scala的新开发人员,也是Spark GraphX的新用户。 到目前为止,我真的很享受我的时间,但我只是有一个非常奇怪的错误。我已经将问题隔离到长到整数的转换,但这真的很奇怪。 另一件奇怪的事情是,它在Windows中工作正常,但在Linux中不工作(创建无限循环)。我在Linux中找到了问题的根源,但我不明白为什么会有问题。我必须先把随机数放在一个变量里,然后它才能工作 您应该能够复制/粘贴并执行整个过程 Scala 2.10.6、Spark 2.1.0、Linux Ubuntu 16

这里是Scala的新开发人员,也是Spark GraphX的新用户。 到目前为止,我真的很享受我的时间,但我只是有一个非常奇怪的错误。我已经将问题隔离到长到整数的转换,但这真的很奇怪。 另一件奇怪的事情是,它在Windows中工作正常,但在Linux中不工作(创建无限循环)。我在Linux中找到了问题的根源,但我不明白为什么会有问题。我必须先把随机数放在一个变量里,然后它才能工作

您应该能够复制/粘贴并执行整个过程

Scala 2.10.6、Spark 2.1.0、Linux Ubuntu 16.04

 import org.apache.spark.{SparkConf, SparkContext}
  import org.apache.spark.graphx._
  import scala.util.Random

object Main extends App {

  //Fonction template pour imprimer n'importe quel graphe
  def printGraph[VD,ED] ( g : Graph[VD,ED] ): Unit = {
    g.vertices.collect.foreach( println )
  }

  def randomNumber(limit : Int) = {
    val start = 1
    val end   = limit
    val rnd = new Random
    start + rnd.nextInt( (end - start) + 1 )
  }

  val conf = new SparkConf()
    .setAppName("Simple Application")
    .setMaster("local[*]")

  val sc = new SparkContext(conf)
  sc.setLogLevel("ERROR")

  val myVertices = sc.makeRDD(Array((1L, "A"), (2L, "B"), (3L, "C"), (4L, "D"), (5L, "E"), (6L, "F")))

  val myEdges = sc.makeRDD(Array(Edge(1L, 2L, ""),
    Edge(1L, 3L, ""), Edge(1L, 6L, ""), Edge(2L, 3L, ""),
    Edge(2L, 4L, ""), Edge(2L, 5L, ""), Edge(3L, 5L, ""),
    Edge(4L, 6L, ""), Edge(5L, 6L, "")))

  val myGraph = Graph(myVertices, myEdges)

  //Add a random color to each vertice. This random color is chosen from the total number of vertices
  //Transform vertex attribute to color only

  val bug = myVertices.count()
  println("Long : " + bug)
  val bugInt = bug.toInt
  println("Int : " + bugInt)

  //Problem is here when adding myGraph.vertices.count().toInt inside randomNumber. Works on Windows, infinite loop on Linux.
  val g2 = myGraph.mapVertices( ( id, name  ) => ( randomNumber(myGraph.vertices.count().toInt) ))

 //Rest of code removed



}

不确定您是否正在寻找解决方案或根本原因。 我相信
mapVertices
方法会干扰
计数(一个是转换,一个是动作)

解决办法是

val lim = myGraph.vertices.count().toInt
val g2 = myGraph.mapVertices( ( id, name  ) => ( randomNumber(lim) ))

不确定您是否正在寻找解决方案或根本原因。 我相信
mapVertices
方法会干扰
计数(一个是转换,一个是动作)

解决办法是

val lim = myGraph.vertices.count().toInt
val g2 = myGraph.mapVertices( ( id, name  ) => ( randomNumber(lim) ))