Spark Tips

1. Loop를 쓰는 순간 OutOfMemoryError DataFrame를 다루지 않는 순간 Spark cluster 중 Driver만 사용하게 된다. DataFrame을 안씀 (= 기껏 sqlContext.read로 읽어놓고 collect해서 사용함) -> 스파크가 아니라 스칼라에서 돌아감 (= Executor가 아니라 Driver에서 돌아감) -> Single node computing -> Out of Memory 2. UDF를 사용할 때 a) 파라미터에 Primitive Type을 넣지 않는 것을 추천 Scala기준으로 설명한다. […]

Spark Standalone Cluster with Docker Swarm

이번에 연구실에서 Apache Spark Cluster를 구축할 일이 있어서 구축 방법을 문서화했다. 이 포스트에서는 그 문서에 살점을 조금 더 붙여서 올려본다. 아울러 데이터가 최대한 내부망에서 처리되는 것을 원하시는 교수님 + 클라우드로 연구비를 사용하기 힘듦 등의 이유로 AWS를 사용할 수 없는 환경이라 직접 설치 / 설정했음을 밝혀둔다. Why Standalone? YARN, Mesos, Kubernetes와 같은 방법 대신에 왜 Docker […]

Convert Scala Map to JSON with lift-json

Tested Env: Scala 2.11, lift-json_2.11-2.6.3 Ref: https://github.com/lift/lift/blob/master/framework/lift-base/lift-json/src/main/scala/net/liftweb/json/JsonAST.scala#L327 1. Normal Scala Map m ‘s type: Map[String, Any] 2. Use lift-json’s implicit Cast Map[String, Any] to Map[String, JValue] explicitly. 3. Convert Map[String, JValue] to JObject 4. Generate String from JObject 5. But! It cannot convert List that contains Map (List[Map]), since lift-json doesn’t have implicit function for converting Map to JValue. I […]

Convert Spark DataFrame to Map in Scala

테이블에서 각 나이별 Count를 구하는 상황이었다. val ageGroup = finalDf.groupBy(“나이”).count() 과 같이 각 나이가 몇 번 출현하는지 세는 것은 크게 문제가 없었지만, 사람이 어려봤자 0살, 늙어봤자 200살이니 굳이 이것을 데이터프레임으로 들고있기 보다는 Scala built-in Map으로 변환하고 싶었다. 하지만 ageGroup: org.apache.spark.sql.DataFrame = [나이: int, count: bigint]와 같이, 나이는 int, count는 bigint 타입으로 출력되어, 이것을 Seq로 만든뒤 List로 만드니 […]

Create Spark Project in intelliJ

IntelliJ Version 2017.1.4 1. Create Scala Project with SBT based 2. Check Latest Spark Version https://mvnrepository.com/artifact/org.apache.spark Currently, Spark doesn’t support the Scala 2.12 => You should make intelliJ Project with Scala version 2.11.X. 3. Project Structure > Libraries > + >From Maven > Search org.apache.park:spark-core Select version you found on the maven website. 4. Done! […]