스파크 공부중 노트
소소하게 스파크 설치 체험중 (MacOS, JDK1.8)
작업 목표
- 스파크로 문서 내의 단어 세기
- 포스트그레스큐엘 접속하기
환경 변수
export SPARK_MASTER_IP=127.0.0.1
export SPARK_LOCAL_IP=127.0.0.1
export SCALA_HOME=/usr/local/scala
export $PATH=$PATH:$SCALA_HOME/bin
스칼라 설치
http://www.scala-lang.org/download/2.10.5.html 에서 2.10.5 다운로드.
- 2.11은 안됨, brew는 기본이 2.11임
- 압축을 풀어서
/usr/local/scala
에 넣어두자.
http://www.scala-sbt.org/release/tutorial/Manual-Installation.html 에서
- jar 파일 다운로드후
/usr/local/scala/bin
에 넣음.
스파크 설치
http://spark.apache.org/ 에서 spark 1.5 다운로드하고 압축 풀기
cd spark-1.5.0
./sbin/start-master.sh
./bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077 -c 1 -m 512M
프로젝트 생성 (프로젝트이름은 hanal)
mkdir hanal
cd hanal
mkdir -p src/main/scala/asense
mkdir -p project/target
mkdir -p target
소스 작업
SBT 설정 (build.sbt)
organization := "asense"
name := "analizer"
version := "0.0.1"
scalaVersion := "2.10.7"
scalacOptions += "-deprecation"
libraryDependencies ++= List(
"org.apache.spark" % "spark-mllib_2.11" % "1.5.0",
"org.postgresql" % "postgresql" % "9.4-1202-jdbc42"
)
메인 소스 (src/main/scala/asense/Anal.scala)
import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vector
import java.util.HashMap
import java.sql.{Connection, DriverManager, ResultSet, SQLException}
object Anal {
def mul(x: Int) = {
("aa","bb")
}
def main(args: Array[String]) = {
val (a,b) = mul(1)
println("Hi!", a)
val conf = new SparkConf().setAppName("Hotel Text Analizer").setMaster("local[1]")
val sc = new SparkContext(conf)
val logData = sc.textFile("hotel.txt", 2).cache()
val s1 = "파타야"
val s2 = "방콕"
val numAs = logData.filter(line => line.contains("호텔")).count()
val numBs = logData.filter(line => line.contains("방콕")).count()
println("Lines with %s: %s, Lines with %s: %s".format(s1, numAs, s2, numBs))
try {
val db = DriverManager.getConnection("jdbc:postgresql://localhost/hotels_dev","jdb", "")
val st = db.createStatement
val res = st.executeQuery("SELECT title from blinks LIMIT 9")
while( res.next) {
println(res.getString("title"))
}
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
println("jdbc load #1")
val prop = Map( "url"->"jdbc:postgresql://localhost/hotels_dev", "dbtable" -> "(select title, body from blinks limit 10) as blogs")
println("jdbc load #2")
val jdbc1 = sqlContext.load("jdbc",prop)
println(jdbc1)
val it = jdbc1.collectAsList().iterator()
while(it.hasNext) {
val x=it.next
println(x)
}
}
catch{
case e: Exception => println("ERR");
e.printStackTrace();
}
}
}
컴파일
sbt compile
sbt run
- 꽤 많은 jar 파일들이 ~/.m2 에 자동으로 쌓인다.
감상
- 스칼라 2.11은 이전 버전과 호환되지 않음
- 스파크 1.5.0 은 스칼라 2.10 이 필요함 (2.11을 쓰려면 소스 컴파일 필요)
- 스칼라를 이버전 저버전 깔아서 테스트하다보면 요상한 에러가 발생
- 맥북프로에 팬이 있다는 걸 기억나게 해준다.
- 이건 자바 1.8이 필요
이후에 탐사할 곳들
- 한글 분석기
- http://spark.apache.org/docs/latest/mllib-feature-extraction.html (이게 내가 하고 싶은 것…)
최종 목표는
- 백만건의 문서를 내가 원하는 백개 정도의 키워드 관련도로 소팅.