본문 바로가기

IT105

Coroutine Flow - 2부 지난 번에 포스팅한 1부 에 이어서 계속 알아보려고 한다. Buffering flow에서 실행되는 작업이 오래 걸리는 작업일 때, collect를 수행하면 전체적으로 성능이 낮아 질 수 밖에 없다. (각 작업을 순차적으로 실행하는 flow의 컨셉에 따라...) fun simple(): Flow = flow { for (i in 1..3) { delay(100) // pretend we are asynchronously waiting 100 ms emit(i) // emit next value } } fun main() = runBlocking { val time = measureTimeMillis { simple().collect { value -> delay(300) // pretend we are p.. 2020. 11. 21.
Coroutine Flow - 1부 코틀린에서 제공하는 코루틴 중 Flow에 대해 살펴보려고 한다. Flow는 이미 명명된 이름에서 짐작할 수 있듯이, 간단히 언급하면 Sequence의 비동기 버전 정도로 이해하면 될 것 같다. 좀 더 자세히 보면, Sequence는 Stream 단위의 데이터를 하나 처리하고 다음 하나 방식이지만, Flow는 Stream의 각 데이터 결과를 기다리지 않고 작업한다. (물론 값은 순차적으로 가져온다.) fun simple(): Flow = flow { println("Flow started") for (i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { println("Calling simple function...") simple().collec.. 2020. 11. 21.
Spark - RDD vs Dataframes vs Datasets RDD와 Dataframes, Datasets를 비교하는 글이 있어서 보려고 한다.중간중간 의역 및 생략이 있을 수 있다. 때문에 보다 자세한 글은 아래 원문을 참조https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html 우리는 언제, 왜 RDD, Dataframes, Datasets를 사용해야 할까? Resilient Distributed Dataset (RDD)RDD는 Spark 등장 이래로 주로 사용된 API 이다. Spark Core에서는 RDD는 변경할 수 없는(Immutable) 데이터의 집합으로 클러스터 내의 여러 노드에 분산되어 있다.(Transformati.. 2020. 2. 15.
Spark - Datasets Datasets에 대해 알아보기전에 어떤 점 때문에 Datasets가 필요한지에 대해 알아보자.case class Listing(street: String, zip: Int, price: Int) val listingsDF = List(Listing("A", 0, 100), Listing("B", 1, 101), Listing("C", 2, 200)).toDF() val averagePricesDF = listingsDF .groupBy($"zip") .avg("price") .show()+---+----------+|zip|avg(price)|+---+----------+| 1| 101.0|| 2| 200.0|| 0| 100.0|+---+----------+ 위의 코드를 실행시키면 "zip"으로 그룹화.. 2020. 2. 12.