전체 글
-
Pattern Match 조합 - Email 주소 예제scala/basic 2021. 7. 27. 17:49
문제 email 의 username 부분이 동일한 문자열로 2번 반복되면서 모두 대문자인지 여부를 확인할 수 있는 아래 함수를 작성하라 def userTwiceUpper(s: String): String // 호출 결과 예시 userTwiceUpper("DIDI@hotmail.com") // match: DI in domain hotmail.com userTwiceUpper("DIDO@hotmail.com") // no match userTwiceUpper("didi@hotmail.com") // no match Code "Programming in Scala" 책에 나오는 코드 object PatternMatchTest { object Email { def apply(user: String, domai..
-
broadcast join 과 bucket joinspark 2021. 7. 26. 00:11
broadcast join join 할 데이터가 작은게 있을 경우 spark 에서 자동으로 broadcast join 을 적용해 준다. broadcast join 을 적용하라고 broadcast() function 으로 Hint 를 줄 수도 있다. import org.apache.spark.sql.functions.broadcast import org.apache.spark.sql.{Column, DataFrame, SparkSession} object MySpark extends Serializable { def main(args: Array[String]): Unit = { val spark: SparkSession = ??? val smallDf: DataFrame = ??? val hugeDf: ..
-
spark managed tables - partitionBy, bucketBy, sortByspark 2021. 7. 25. 19:37
문제 spark 에서 schema 를 적용해 데이터를 읽기에서 사용된 csv 형식의 데이터를 spark managed table 로 저장하기 partitionBy, bucketBy, sortBy 도 사용해 보도록 한다. Code /** * build.sbt 에 아래 의존성을 추가해 준다. * "org.apache.spark" %% "spark-hive" % sparkVersion */ import org.apache.spark.sql.{DataFrame, Encoders, SaveMode, SparkSession} import java.sql.Date final case class Person(name: String, age: Int, birthDay: Date) object MySpark extends..
-
spark tables - managed vs unmanaged(external) tablesspark 2021. 7. 25. 18:54
Managed Table table metadata / data 를 spark 에서 관리 table drop 시 metadata 와 data 모두 삭제 data 는 spark.sql.warehouse.dir 에 정의된 곳에 저장 (spark.sql.warehouse.dir 는 cluster 에서 관리됨 - user 가 지정해 사용할 수 없다) bucketing, sorting 해 테이블 생성 가능 Unmanaged Table table metadata 는 spark 에서 관리되고, data 는 user 가 지정한 특정 위치(LOCATION) 에서 관리된다. 이미 존재하는 데이터를 대상으로 테이블 생성이 가능 이미 존재하는 데이터가 아닌 새로운 데이터로 테이블을 생성하는 것도 가능 (bucketing, s..
-
enum 을 사용한 모델링scala/basic 2021. 7. 23. 23:20
문제 연령대를 계산해 주는 다음 함수를 작성하라 /** * age 값이 * - 0 이하면 "~0" 리턴 * - 1~9 값 이면 "1~9" 리턴 * - 10~59 값 이면 "10~59" 리턴 * - 60 이상이면 "60~" 리턴 */ def ageGroup(age: Int): String = ??? Code scala standard library 로 제공되는 enum 은 기능이 빈약하니 enumeratum 을 활용해 작성한다. import AgeGroup.{Elder, Interval, Invalid} import enumeratum._ import scala.collection.immutable sealed trait AgeGroup extends EnumEntry { self => override d..
-
데이터의 partition 수와 partition 별로 레코드 수 확인 방법spark 2021. 7. 18. 21:57
문제 DataFrame df 에 대해 다음을 확인하는 방법 몇개의 partition 으로 나뉘어져 있는지? partition-id 별로 몇개의 record 가 들어 있는지? Code val df: DataFrame = ??? val numPartitions: Int = df.rdd.getNumPartitions println(numPartitions) import org.apache.spark.sql.functions.spark_partition_id df.groupBy(spark_partition_id()).count().show()
-
spark 에서 schema 를 적용해 데이터 읽기spark 2021. 7. 18. 19:17
문제 hdfs://localhost:9000/csv.txt 에 아래와 같이 csv 형식의 데이터가 있을 때 name,age,birthDay A,1,2020-01-01 B,2,2019-02-02 C,3,2018-03-03 name 은 String, age 는 Integer, birthDay 는 Date 형식으로 읽으려면? 방법1 import org.apache.spark.sql.types._ import org.apache.spark.sql.{DataFrame, SparkSession} object MySpark extends Serializable { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("l..