미리 말 함
import scala.util.parsing.json._ 를 이용하는 json parser 는 엄청나게 느리다.
이거 말고 다른 json parser 를 사용하길 권장함.
여튼 json parser 사용 예제는 아래와 같음.
참고 : stackoverflow.com/a/4186090/5868252
import scala.util.parsing.json._ val json = """ { "event": "click", "properties": { "version": "0.2", "id": "eyeballs", "blahblah": [ { "a": "news1", "b": "abc" }, { "a": "news2", "b": "wwf" }, { "a": "news3", "b": "def" }, { "a": "news4", "b": "ghr" } ], "url": "https://eyeballs.tistory.com/", "booleanvalue": true, "screenSize": "1680x1050", "clientDocSize": "1663x939", "time": 20200812, "version": "A12" } } """.stripMargin class CC[T] { def unapply(a:Any):Option[T] = Some(a.asInstanceOf[T]) } object M extends CC[Map[String, Any]] object L extends CC[List[Any]] object S extends CC[String] object D extends CC[Double] object B extends CC[Boolean] val result = for { Some(M(map)) <- List(JSON.parseFull(json)) S(event) = map("event") M(properties) = map("properties") S(url) = properties("url") D(time) = properties("time") } yield { (event, url, time.toInt) } |
val jsonString = """ { "languages": [{ "name": "English", "is_active": true, "completeness": 2.5 }, { "name": "Latin", "is_active": false, "completeness": 0.9 }] } """.stripMargin val result = for { Some(M(map)) <- List(JSON.parseFull(jsonString)) L(languages) = map("languages") M(language) <- languages S(name) = language("name") B(active) = language("is_active") D(completeness) = language("completeness") } yield { (name, active, completeness) } |
Spark 에서 위의 코드를 실행하다가 Task not serializable: java.io.NotSerializableException 에러가 나면
아래처럼 Serializable 을 사용해본다.
class CC[T] extends java.io.Serializable { def unapply(a:Any):Option[T] = Some(a.asInstanceOf[T]) }
stackoverflow.com/a/22596875/5868252
json 을 사용하는 다른 lib 소개 : https://stackoverflow.com/questions/29867579/what-to-use-in-the-face-of-deprecation-of-the-scala-util-parsing-json-package
https://www.slideshare.net/nestorhp/scala-json-features-and-performance
아래 링크는 인터넷 서핑하다가 본건데
실제로 잘 작동하는지, 사용하기 편한지는
한 번 봐야 함
'Spark' 카테고리의 다른 글
[Spark] 디버깅, 로그 보는 방법 링크(영어) (0) | 2021.03.24 |
---|---|
[Spark] history ui port 바꾸는 방법 (0) | 2020.08.13 |
[Spark] List 값을 df row 에 넣는 법 링크 (0) | 2020.08.12 |
[SBT] 자세한 설명 링크 (0) | 2020.08.11 |
[Spark] 내가 사용한 시간 관련 기능들 (0) | 2020.08.07 |