ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spark persist()와 cache()
    Data Engineering/Spark 2022. 12. 28. 18:54

     

     

    Spark에서는 action 시점마다 데이터를 메모리로 로드합니다

    따라서 action이 여러 번 될 때 매번 데이터를 로드하면 비효율적이므로 한번 로드한 데이터 메모리 상에 저장시킬 수 있는 cache와 persist 메소드가 존재합니다.

     

     

    cache와 persist 두 메소드 모두 데이터를 저장공간에 올려두는 작업을 하는데 약간의 차이가 있습니다.

    (Spark 3.3.1 기준입니다.)

     

    • cache()
      • 기본값으로 설정된 storage level만 활용 가능
      • RDD를 활용할 때에는 cache()는 persist(StorageLevel.MEMORY_ONLY)로 동작
      • DF 또는 Dataset를 활용할 때에는 cache()는 persist(StorageLevel.MEMORY_AND_DISK)로 동작

     

    • persist()
      • storage level을 직접 정할 수 있음

    출처 : Spark 3.3.1 docs

     

     

     

    진행하고 있는 프로젝트에서 cache, persist의 속도 차이를 비교해보았습니다.

    아래 코드에서 cache() 부분만 바꿔보면서 테스트 해보았습니다.

    df_pyspark.createOrReplaceTempView("item_sales") 
    sql = "select * from item_sales" 
    sales_part = (spark.sql(sql).repartition(spark.sparkContext.defaultParallelism, ['컬럼명'])).cache( )

     

     

    결과

    cache 사용하지 않았을 때 cache() 사용 persist(StorageLevel.MEMORY_ONLY) 사용
    0.44832초 0.74691초 0.20407초

     

     

     

    cache를 사용하였을 때 cache를 사용하였을 때보다 속도가 더 오래 걸렸습니다.

    이유로 캐싱비용과 cache의 기본 storage level이 MEMORY_AND_DISK 기 때문에 DISK I/O 비용이 추가적으로 들었을 것이라고 생각하였습니다.

    따라서 storage level을 MEMORY_ONLY로 설정하여 DISK I/O 비용을 줄여보았는데 속도가 줄어든 결과를 얻었습니다.

    'Data Engineering > Spark' 카테고리의 다른 글

    Parquet와 csv 차이  (0) 2022.12.28

    댓글

Designed by Tistory.