GOOD4ME
[PySpark] toPandas()가 너무 느릴 경우 꿀팁 본문
반응형
독자 대상📣
👉 PySpark를 Standalone-client 모드로 사용하시려는 분
👉 최소한의 메모리를 사용하여 pyspark를 사용하시려는 분
👉 spark를 통해 hive 테이블 조회 후, 웹으로 데이터를 날리려는 분
출간 이유❓
👉 PySpark를 통해 Hive 테이블을 조회한 후, toPandas()할 시, 처리속도가 너무 느린 것을 확인
문제 파악🔍
def spark_to_df():
spark = SparkSession.builder\
.appName("spark_data_to_pandas_dataframe")\
.config("hive.metastore.uris", "thrift://hive:9083")\
.enableHiveSupport()\
.getOrCreate()
spark_df = spark.sql("select * from 20221122_ai_mark_data")
# 하단의 작업이 굉장히 느린 것을 확인
pandas_df = spark_df.toPandas()
return pandas_df
문제 해결🎊
A: Spark DataFrame에서 toPandas() 메서드를 실행하면
클러스터의 노드에 분산된 모든 raw가 데이터를 맞추기 위해
충분한 메모리가 필요한 driver 프로그램으로 수집됩니다.😁
Apache Arrow는 toPandas() 또는 createDataFrame()을 할 때,
spark와 pandas의 dataframe 간 변환을 최적화하는 데 사용할 수 있는
독립적인 In-memory 컬럼 형식입니다.😀
따라서 우리는 PySpark 사용 시, Arrow를 적용시키는 방법을 찾으면 됩니다.
하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗
def spark_to_df():
spark = SparkSession.builder\
.appName("spark_data_to_pandas_dataframe")\
.config("hive.metastore.uris", "thrift://hive:9083")\
.enableHiveSupport()\
.getOrCreate()
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
# 버전에 따라 "spark.sql.execution.arrow.enabled" 을 사용해야할 수도 있음.
spark_df = spark.sql("select * from 20221122_ai_mark_data")
pandas_df = spark_df.toPandas()
return pandas_df
반응형
'개발.오류.정리 > Spark' 카테고리의 다른 글
[PySpark] Spark Cluster 데이터 전처리 및 집계 (0) | 2023.01.09 |
---|---|
[PySpark] Spark Cluster + MSSQL 데이터 조회 (0) | 2023.01.03 |
[PySpark] Kafka Cluster + Spark Cluster + MSSQL 실시간 데이터 조회 (0) | 2022.12.28 |
[PySpark] Kafka + Spark + MSSQL 실시간 데이터 조회 (0) | 2022.12.27 |
Comments