본문 바로가기
반응형

전체 글199

[We-Co] Spark Dataset 액션연산 안녕하세요. 위기의코딩맨입니다. 오늘은 액션에 대해 간단하게 알아보고 액션 연산에 사용되는 함수들을 알아보도록 하겠습니다. Dataset이나 RDD는 트랜스포메이션 연산과 액션연산이 사용되며, 액션 연산이 실행될 때, 실제 연산이 실행됩니다. 액션 연산이 호출되어야만 트랜스포메이션 연산의 결과를 확인할 수 있습니다. scala> case class Person(name:String, age: Int, job:String) defined class Person scala> val row = Person("Person_1",5,"student") row: Person = Person(Person_1,5,student) scala> val row2 = Person("Person_2",10,"student") .. 2021. 9. 8.
[We-Co] Spark Dataset,Dataframe을 이용한 단어 수 세기 예제 안녕하세요. 위기의코딩맨 입니다. 오늘은 Dataset과 dataframe을 이용하여 단어 수를 카운트하는 예제를 작성해보겠습니다. 우선 코드를 작성하기 전에 pom.xml 파일을 설정해주셔야 합니다. org.apache.spark spark-sql_2.11 2.3.0 이제 코드를 작성하는데 단계별로 나눠서 진행하겠습니다. 1. SaprkSession 생성 2. SparkSession으로부터 Dataset 또는 Dataframe 생성 3. 생성된 Dataset 또는 Dataframe을 통한 데이터 처리 4. SaprkSession 종료 [ SparkSession 생성 ] scala> import org.apache.spark.sql.SparkSession import org.apache.spark.sql.. 2021. 9. 6.
[We-Co] Spark Dataset 안녕하세요. 위기의코딩맨입니다. 오늘은 Spark에서 중요한 개념인 Dataset에 대해 간단하게 알아보도록 하겠습니다. [ DataSet ] Dataset 나오기 이전에 DataFrame이라는 클래스를 구현해서 언어와 상관 없이 사용하고 있었습니다. Dataset은 버전 Saprk 1.6에서 처음 소개되었으며, Java언어와 Scala언어에서만 사용이 가능했었습니다. 이때 버전에서는 Dataset이 DataFrame을 대체한다는 느낌이 없었기 때문에 두 가지 모두 사용했습니다. 그러나 Spark 2.0 버전부터 DataFrame 클래스가 Dataset 클래스로 통합되어 타입 별칭 기능을 가진 Scala 언어에서만 기존 방식 처럼 모두 사용가능 했지만 해당 기능이 없던 Java에서는 통합된 Dataset.. 2021. 9. 6.
[We-Co] Spark Accumulator 안녕하세요. 위기의 코딩맨입니다. 오늘은 Accumulator에 대해 간단하게 알아보도록 하겠습니다. 브로드캐스트 변수는 읽기 동작을 행하는 것이라면 Accumulator은 쓰기 동작을 위한것으로 생각하시면됩니다. 데이터 분석을 위해 미리 기록할 형식을 만들어 놓고 그 형식에 맞춰서 기록하고 분석하는 것입니다. Accumulator을 사용하시려면 org.apache.spark.util.AccumulatorV2를 생성하여 사용해야합니다. scala> import org.apache.spark.util.AccumulatorV2 import org.apache.spark.util.AccumulatorV2 scala> val acc1 =sc.longAccumulator("invalidFormat") acc1: .. 2021. 9. 3.
[We-Co] Spark RDD 출력 연산 (2) 안녕하세요. 위기의코딩맨입니다. 오늘은 RDD 출력연산 2번째 시간입니다!! Spark RDD 출력연산(1) [We-Co] Spark RDD 출력 연산 (1) 안녕하세요. 위기의코딩맨입니다. 오늘은 RDD의 출력 연산에 관해 알아보도록 하겠습니다. 관련 연산들이 많이 존재하여 첫번째와 두번째 나눠서 진행하도록 하겠습니다. [ first ] first는 말 그대 we-co.tistory.com 바로 시작해보겠습니다. [ aggregate() ] reduce()와 fold() 메서드는 입출력이 모두 같은 타입으로 진행해야한다는 제약조건이 있지만, aggregate()는 그러한 제약조건이 걸려있지않습니다. 간단하게 알아보면 총 3개의 인자를 사용합니다. 첫번째로는 fold()와 유사하게 초깃값을 지정해주고, .. 2021. 9. 2.
[We-Co] Spark RDD 출력 연산 (1) 안녕하세요. 위기의코딩맨입니다. 오늘은 RDD의 출력 연산에 관해 알아보도록 하겠습니다. 관련 연산들이 많이 존재하여 첫번째와 두번째 나눠서 진행하도록 하겠습니다. [ first ] first는 말 그대로 RDD의 첫번째 인자를 가져오는 역할을 합니다. 스파크 셸 작업에서 트랜스포메이션의 수행 결과 등을 빠르게 확인하는 역할로 활용할 수 있습니다. scala> val rdd = sc.parallelize(List(3, 5, 1)) scala> val result = rdd.first result: Int = 3 scala> print(result) 결과를 확인해보면 3이 출력되는 것을 확인할 수 있습니다. [ take() ] take()는 RDD의 첫번째 요소로부터 n개 까지의 요소를 반환하는 메서드입니.. 2021. 9. 2.
[We-Co] Spark RDD filter 및 정렬 연산 안녕하세요. 위기의 코딩맨입니다. 오늘은 RDD의 filter 및 정렬 연산에 대해 알아보도록 하겠습니다. [ filter() ] 용어 그대로 내가 원하는 요소를 뽑아내는 함수입니다 scala> val rdd = sc.parallelize(1 to 5) scala> val result = rdd.filter(_>2) scala> print(result.collect.mkString(", ")) 결과를 확인해보면 3, 4, 5 가 출력되는 것을 확인할 수 있습니다. 1~ 5까지 숫자를 RDD에 넣어주고 2보다 큰 수를 result에 넣어주도록 filter()의 조건을 설정해주면 결과 값이 출력 됩니다. [ sortByKey() ] sortByKey() 함수는 키 값을 기준으로 RDD의 요소들을 정렬하는 연.. 2021. 9. 1.
[We-Co] Spark RDD PIPE 및 파티션 연산 안녕하세요. 위기의 코딩맨입니다. 오늘은 Spark RDD PIP 및 파티션 연산에 대해 알아보도록 하겠습니다. [ pipe() ] 데이터를 처리할 때 외부 프로세스를 사용할 수 있습니다. val rdd = sc.parallelize(List("1,2,3","4,5,6","7,8,9")) val result = rdd.pipe("cut -f 1,3 -d,") print(result.collect.mkString(", ")) 결과는 1,3 4,6 7,9 의 결과를 얻을 수 있습니다. 해당 건은 3개 숫자의 문자열을 리눅스의 cut 유틸리티를 이용해 분리하고 1, 3번째 숫자를 가져오는 예제입니다. [ coalesce(), repartition() ] RDD를 생성하고, filter() 연산 등, 많은 트랜.. 2021. 8. 27.
[We-Co] Spark RDD 집계 연산 안녕하세요. 위기의코딩맨입니다. 오늘은 Spark RDD 집계와 관련된 연산들을 알아보도록 하겠습니다. [ reduceByKey() ] RDD의 구성이 키와 값으로 구성되어 있어야 사용가능합니다. 같은 키의 값들을 하나의 값으로 더해서 새로운 RDD를 생성하는 메서드입니다. val rdd = sc.parallelize(List("a","b","b")).map((_,1)) val result = rdd.reduceByKey(_ +_) print(result.collect.mkString(", ")) 결과 값은 (a,1), (b,2) 이유는 rdd의 인자 중 키 b가 2개 존재하며, 1의 인자를 갖고 있어 1+1 하여 b는 2의 출력 값을 얻게됩니다. [ foldBykey() ] RDD의 구성이 키와 값으로.. 2021. 8. 26.
반응형