Spark의 로컬 개발 환경을 만드는 방법(Scala용)

7204 단어 스파크Scala
Scala의 패키지 관리로서 sbt가 있는 것 같지만, 원래 Scala 처음으로 아무것도 몰랐기 때문에, 자신의 비망록으로서.
모처럼 하고 Eclipse에서 IntelliJ로 마이그레이션하려고 했으므로 IntelliJ 기반으로 이야기를 진행합니다. Eclipser는 적절하게 읽어 줄 수 있다고.

sbt



Scala 패키지 관리. Ruby의 gem처럼 글로벌 더러움 없이 끝내고(Bundler 사용하면 좋은 이야기지만) 편리.
기능적으로는 몇개인가 있는 것 같지만, 자신은 의존관계의 정리에 밖에 아직 사용하고 있지 않기 때문에(잘 다루지 않고 있다) 때문에 좋은 플러그인 있으면 가르쳐 주세요.
Spark의 다양한 라이브러리도 여기에서 관리합니다.

IntelliJ로 프로젝트 만들기


  • New -> Project에서 새 프로젝트 만들기
  • Scala -> sbt를 선택한다. 이 옵션이 없으면 환경 설정에서 Scala 플러그인을 설치하고 다시 시작하면 나온다.
  • 적당히 이름 넣어 finish. 마음대로 프로젝트를 할 수 있다.
  • 생성된 build.sbt에 다음 항목을 추가한다.
    버전은 적절히 지정할 것.

  • build.sbt
    libraryDependencies ++= Seq(
      "org.apache.spark" %% "spark-core" % "1.4.1",
      "org.apache.spark" %% "spark-graphx" % "1.4.1",
      "org.apache.spark" %% "spark-sql" % "1.4.1"
    )
    
  • 저장하고 sbt 실행. auto import에 체크를 넣으면 저장 한 순간에 의존 관계의 정리가 달린다
  • 정상적으로 종료하면, 디렉토리가 몇개인가 할 수 있다. 이 안의 src/scala 이하에 패키지 잘라 코드 쓰면 OK. 시험에 GraphX ​​사용해 본다. PageRank를 찾아보십시오.

  • example.scala
    package hellospark
    
    import org.apache.spark.graphx.{Graph, GraphLoader}
    import org.apache.spark.{SparkConf, SparkContext}
    
    /**
     * Created by nishimuuu on 2015/08/16.
     */
    object example {
      def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("appname").setMaster("local[*]")
        val sc   = new SparkContext(conf)
    
        val edge_path = "/path/to/edge.csv"
        val node_path = "/path/to/node.csv"
        val graph: Graph[Int, Int] = GraphLoader.edgeListFile(sc, edge_path).cache()
    
        val ranks = graph.pageRank(0.001).vertices
        val nodes = sc.textFile(node_path).map{line =>
          val fields = line.split(",")
          (fields(0).toLong, fields(1))
        }
    
        val ranksByNode = nodes.join(ranks).map {
          case(id, (node, rank)) => (node, rank)
        }
        println(ranksByNode.collect().mkString("\n"))
    
    
        sc.stop()
      }
    }
    
  • 결과
  • (follower2 follow1 A,0.3300364712764322)
    (follower2 follow0,0.4854936516596302)
    (follower3 follow3,0.6927675771080204)
    (follower4 follow4,0.8482247574912182)
    (follower2 follow2,0.5260649857706428)
    (follower2 follow1 B,0.3300364712764322)
    

    이런 느낌. 파일의 경우 edge를 읽고 node를 붙여 가는 것이 편하다.
    아직 세세하게 만지지 않았지만, 읽을 때 고뇨고뇨 할 필요가 없는 것을 알고 좋았다.

    좋은 웹페이지 즐겨찾기