SPARK (2) - Spark 환경 설정 및 scala trait
- Spark gradle dependncy 추가
compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.1'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.1.0'
compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.1.0'
compile group: 'org.apache.spark', name: 'spark-mllib_2.11', version: '2.1.0'
build.gradle 파일 오른쪽 마우스 클릭 gradle refresh
main함수 안에 다음고 같이 적어주고
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext._
import org.apache.spark.SparkContext
object MainScala {
def main(arg: Array[String]) {
val conf = new SparkConf().setAppName("HelloWorld").setMaster("local[1]")
.set("spark.executor.memory", "4g")
.set("spark.driver.memory", "4g")
val sc = new SparkContext(conf)
println("=========================")
println("Hello Spark")
println("=========================")
sc.stop()
}
}
ScalaApplication 을 실행 해주면 실행 완료
RDD 프로그래밍 하기
graph LR
A[RDD 연산]-->B[transformation]
A[RDD 연산]-->C[action]
python으로 예를 들면
lines = sc.textFile("README.md")
Transformation : 존재하는 RDD에서 새로운 RDD를 만들어낸다.(예제는 python)
예를 들면 표현식과 일치하는 어떤 데이터든 걸러내는것이 있을 때
pythonLines = lines.filter(lamda line: "Python" in line)
Action : RDD를 기초로 결과 값을 계산하며, 그 값을 드라이버 프로그램에 되돌려주거나 외부 스토리지(예. HDFS)에 저장 하기도한다.
예를 들면 기존에서 이미 써본적이 있는 액션으로는 첫번째 요소를 되돌려주는 first가 있다.
pythonLines.first()
다음시간에는 spark shell을 이용한 기초 RDD 조작방법에 대해 포스팅 하겠습니다.
SCALA Trait
spark 를 scala 언어로 사용하는데 있어서 scala에 대한 정리도 추가로 하겠습니다.
잘못된 정보가 있으면 댓글로 알려주세요.
scala trait 믹스인
믹스인 ?? 개념이 헷갈린다 .
우선 실습을 하자면
mathFunction trait 은 sumTest 함수는 int 형으로 반환해야한다는 것을 정의하고 있다.
또한 sum 은 mathFunction을 상속 받고 있다.
//mathFunction.scala
trait mathFunction {
def sumTest(value:Int):Int
def averageTest(values:Array[Int]):Int
}
class mathLecture extends mathFunction{
override def sumTest(value:Int):Int = {
3+value
}
override def averageTest(values:Array[Int]):Int={
var sum = 0;
for(i<-(0 to values.length-1)){
sum += values(i)
}
sum/values.length
}
}
아래의 코드는 mathFunction 의 trait 타입을 가지는 mathClass 값을 설정 하였다.
mathClass의 리터럴을 sum() 클래스를 지정해주면 , mathClass 는 mathFunction 타입으로 sumTest 함수를 정의만 하고있지만, sum class 에 정의된 sumTest 함수를 사용할수 있다.
//MainScala.scala
object MainScala {
def main(arg: Array[String]) {
val mathClass:mathFunction = new mathLecture()
println("value +3 : "+mathClass.sumTest(4))
println("average : "+mathClass.averageTest(Array(1,2,3,4,5)))
}
}
실행 결과
value +3 : 7
average : 3
참고 사이트
https://docs.scala-lang.org/ko/tutorials/tour/traits.html.html
sequential collection 에 사용하기 유용한 함수
- zipWithindex
val days = Array("Sunday","Month","Tuesday","Wednesday","Thursday","Saturday")
days.zipWidthIndex.foreach{
case(day,count) => println(s"$count is $day")
}
결과 값
0 is Sunday
1 is Monday
2 is Tuesday
3 is Wednesday
4 is Thursday
5 is Friday
6 is Saturday
zip 두 리스트의 원소들의 쌍으로 이루어진 단일 리스트를 반환
List(1, 2, 3).zip(List("a", "b", "c"))
결과 값
List[(Int, String)] = List((1,a), (2,b), (3,c))
'BackEnd > Spark' 카테고리의 다른 글
Spark BroadCast (0) | 2019.08.28 |
---|---|
SPARK 에서의 기본 행동(action) 연산자 및 변환(transformation)연산자(2) (0) | 2018.06.18 |
SPARK 에서의 기본 행동(action) 연산자 및 변환(transformation)연산자(1) (0) | 2018.06.17 |
Spark(3) SparkContext-1 (0) | 2018.05.16 |
SPARK(1)-환경 구축 (1) | 2018.05.13 |