군집화(Clustering)와 분류(Classification)의 차이는

입력 데이터가 배정 될 수 있는 클래스의 갯수의 정의에 따라 달라진다.


군집화는 클래스의 갯수가 복수개이며 미리 정해져 있지 않다.

예를들어 영상처리와 같이 사진을 통한 색상의 분류 등은 어떤 사진이냐에 따라 그 클래스의 개수가 동적이기 때문에

클래스의 개수가 정해져 있지 않다.


분류는 미리 정해진 클래스의 개수대로 유사한 클래스에 입력데이터가 배정된다.

예를들어 미리 Centroid에 대한 정의를 기반으로 입력데이터 대한 분류를 처리하는 K-means 알고리즘,

혹은 사용자가 직접 손으로 작성한 문자를 인식하여 어떤 문자인지 판별하는 기계학습 알고리즘은

입력데이터가 할당받은 클래스가 미리 정의되어 있으므로 "분류"이다.

리눅스에서의 스칼라 기반 스파크 프로그램을 패키징하여 단독 애플리케이션으로 동작하는 jar파일을

만드는 방법이 아직 온라인 상에서 찾기 힘든 것 같다. 그래서 내가 직접 써본다


우선 리눅스에서 SBT를 설치해야 한다.

SBT는 Simple Build Tool의 약자로, scala 프로젝트의 빌드를 간단하게 수행할 수 있도록 도와주는 툴이다.

만약 아직 설치가 안되있다면 아래 리눅스 명령어로 설치하면 된다. 설치 관련된 방법은 여러가지지만..

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
sudo apt-get install sbt

SBT에 대한 준비가 완료되었다면,

스파크 어플리케이션을 만들기 위한 패키지를 디렉터리 형식으로 만든다

그래서 프로젝트의 최상위 디렉터리에서 find .을 수행했을 때 다음과 같은 예제의 형태로 나와야한다.

ubuntu@ip-172-31-17-38:~/spark/bigdata$ find . . ./simple.sbt ./src ./src/main ./src/main/scala ./src/main/scala/SimpleApp.scala

위 출력문 중에 중요한 것이 simple.sbt라는 파일이다.

이 파일을 통해 빌드 시 옵션 등을 지정해 줄 수 있다.

simple.sbt의 내용을 살펴보면 다음과 같다.

name := "Simple Project" version := "1.0" scalaVersion := "2.11.7" libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.2"

대강 버전에 대한 명시만 자신의 개발환경에 맞추어 수정해 주면 된다.

그리고 빌드를 수행한다.

sbt package

위 명령어를 통해 빌드가 시작된다.

성공적으로 빌드가 완료되었다면, 생성된 jar 패키지 파일의 경로가 출력된다.

이 jar 패키지 파일을 만듦으로써 하나의 스파크 단독 애플리케이션이 완성된 것이다.


이제 spark-submit을 이용하여 이 애플리케이션을 실행시킬 수 있다!

ubuntu@localhost:~/spark/bigdata$ /home/ubuntu/spark/bin/spark-submit --class "SimpleApp" --master local[4] /home/ubuntu/spark-1.2.0-bin-hadoop2.4/bigdata/target/scala-2.11/simple-project_2.11-1.0.jar

가끔은 윈도우에서의 빌드 환경을 구축하는 것이 너무나도 까다로울 때가 있다. (뭘 개발하든, 개발환경을 차리면 반은 했다는 생각이 들정도)

간단한 프로젝트라면 이렇게 리눅스 환경에서 간단하게 프로그램을 짜고 빌드하는 것도 좋은 방법인 것 같다.



딱 두가지만 알면 된다.

//DB 연결

$connect = mysql_connect('localhost','DB계정명','DB암호');

$db = mysql_select_db('DB명',$connect);


위 예제를 통해 $db는 지정된 옵션의 데이터베이스로 연결된 객체가 된다.

이제 다음과 같은 소스로 마음껏 데이터베이스의 정보를 가져오거나 쓸 수 있게된다.


//쿼리문 전송 및 가져오기

$sql = "select *from board where name='admin'";

$result = mysql_query($sql,$connect);


//출력

$fileds = mysql_num_fields($result);

while($row = mysql_fetch_row($result)){

echo $row[0].$row[1].$row[2];

}

$sql 변수는 쿼리를 담는 전용 변수로 지정해 두었다.

INSERT라면 굳이 //출력 이하의 부분을 수행 할 필요는 없다.

하지만 데이터베이스로부터 정보를 가져와서 레코드단위로 읽어내리는 작업은 //출력 이하의 내용을

활용하면 아주 쉽게 가져올 수 있다. while문 한번 당 레코드 한줄을 읽어내려가는 것이며, 배열 $row에는 칼럼 순서대로

데이터가 저장된다.


따로 어디에 저장해두면 항상 유용하게 사용 할 수 있다.

+ Recent posts