Spark SQL에서 자주 발생하는 오류

2025. 3. 20. 12:34·Data Engineer
728x90

1. AnalysisException: "Table or view not found

문제 : 테이블 또는 뷰를 찾을 수 없다는 오류가 발생한 것입니다. 보통 SQL 쿼리에서 존재하지 않는 테이블을 참조할 때 발생합니다.

원인:

  • 테이블이 존재하지 않거나 잘못된 경로를 지정한 경우
  • 테이블 이름을 잘못 입력한 경우

해결 방법:

  • SHOW TABLES 명령어를 사용해 테이블이 존재하는지 확인
  • 정확한 테이블 이름을 사용하고, 경로가 맞는지 다시 확인

예시 코드:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("example").getOrCreate()

# 테이블 존재 여부 확인
spark.sql("SHOW TABLES").show()

# 잘못된 테이블 이름을 사용하여 오류 발생
try:
    df = spark.sql("SELECT * FROM non_existing_table")
except Exception as e:
    print(f"Error: {str(e)}")

2. Py4JJavaError: org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.

문제 : Parquet 파일을 읽을 때 스키마를 자동으로 추론할 수 없다는 오류입니다.

원인:

  • Parquet 파일이 비어 있거나 손상된 경우
  • 데이터 스키마가 명시되지 않은 경우

해결 방법:

  • option("mergeSchema", "true") 옵션을 추가하여 스키마 병합을 시도
  • 파일의 유효성을 검토하고, 데이터가 비어 있는지 확인
  • 데이터를 로드할 때 명시적으로 스키마를 지정

예시 코드:

# 스키마 지정 없이 Parquet 파일 로드 시 오류 발생
try:
    df = spark.read.parquet("path_to_parquet_file")
except Exception as e:
    print(f"Error: {str(e)}")

# 스키마를 명시적으로 지정하여 해결
from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([
    StructField("name", StringType(), True),
    StructField("age", StringType(), True)
])

df = spark.read.schema(schema).parquet("path_to_parquet_file")
df.show()

 


3. OutOfMemoryError: Java heap space

문제 : 메모리 부족으로 인해 작업이 실패하는 오류입니다.

원인:

  • 너무 큰 데이터를 처리하려 할 때 발생
  • Spark의 기본 메모리 설정이 충분하지 않아서 작업을 수행할 수 없을 때 발생

해결 방법:

  • spark.executor.memory 와 spark.driver.memory 설정을 늘려 메모리를 확장
  • 데이터 크기를 줄이거나, cache 및 persist를 사용하여 중간 데이터를 디스크에 저장

예시 코드:

# 메모리 설정 변경
spark = SparkSession.builder \
    .appName("example") \
    .config("spark.executor.memory", "8g") \
    .config("spark.driver.memory", "8g") \
    .getOrCreate()

# 대용량 데이터 캐싱하여 메모리 사용 최적화
df = spark.read.csv("large_data.csv")
df.cache()  # 중간 데이터를 메모리에 캐시하여 재사용 가능
df.show()

4. IllegalArgumentException: requirement failed: No DataSource provided for path

문제 : 데이터 소스를 찾을 수 없다는 오류입니다. 데이터 파일 경로를 잘못 지정한 경우 발생합니다.

원인:

  • 데이터 파일 경로가 잘못 지정된 경우
  • 지정한 파일 형식이 Spark에서 지원되지 않는 경우

해결 방법:

  • 경로를 정확하게 지정하고, 지원되는 파일 형식을 사용
  • 경로에 특수문자나 공백이 포함되어 있다면 따옴표(")로 감쌉니다.

예시 코드:

# 잘못된 경로 사용 시 오류 발생
try:
    df = spark.read.csv("wrong_path/data.csv")
except Exception as e:
    print(f"Error: {str(e)}")

# 경로와 파일 형식을 정확히 지정
df = spark.read.csv("correct_path/data.csv")
df.show()

5. RuntimeException: Task not serializable

문제 : 객체가 직렬화할 수 없는 타입이어서 오류가 발생하는 경우입니다. 주로 map이나 flatMap과 같은 RDD 연산에서 발생합니다.

원인:

  • RDD 연산에서 사용한 객체가 직렬화되지 않는 경우
  • SparkContext를 직접 사용하려고 할 때

해결 방법:

  • 직렬화할 수 없는 객체는 사용하지 않고, Spark 작업 내에서 직렬화 가능한 객체만 사용
  • @transient 애노테이션을 사용해 직렬화되지 않도록 설정할 수 있습니다.

예시 코드:

# 직렬화할 수 없는 객체를 사용하여 오류 발생
class MyClass:
    def __init__(self, value):
        self.value = value

my_object = MyClass(10)
try:
    rdd = spark.sparkContext.parallelize([1, 2, 3]).map(lambda x: x + my_object.value)
except Exception as e:
    print(f"Error: {str(e)}")

# 직렬화 가능한 객체 사용
rdd = spark.sparkContext.parallelize([1, 2, 3]).map(lambda x: x + 10)
rdd.collect()

6. SparkException: Job aborted due to stage failure

문제 : 스테이지 실패로 인해 작업이 중단된 경우 발생합니다.

원인:

  • 데이터 불균형으로 인해 일부 노드에서 작업이 실패
  • 메모리 부족, 네트워크 장애 등의 이유

해결 방법:

  • spark.sql.shuffle.partitions 값을 조정하여 파티셔닝을 최적화합니다.
  • 데이터를 재분배하여 불균형을 줄입니다.

예시 코드:

# 파티션 수 최적화
spark.conf.set("spark.sql.shuffle.partitions", "200")

df = spark.read.parquet("large_data.parquet")
df.groupBy("category").count().show()

 

실무에서는 여기에 기재하지 않은 에러가 굉장히 많습니다.
그렇기에 오류가 발생했을 때 원인을 파악하고 적절한 에러 핸들링 및 수정을 하는 것이 중요합니다.
감사합니다.

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Data Engineer' 카테고리의 다른 글

Redshift vs BigQuery vs Snowflake  (0) 2025.03.25
Spark SQL에서 자주 발생하는 오류 2  (0) 2025.03.20
Spark SQL과 데이터 처리  (0) 2025.03.20
Oracle VM VirtualBox를 활용해서 Linux OS 설치방법  (0) 2023.11.02
mongo db란?  (0) 2023.09.22
'Data Engineer' 카테고리의 다른 글
  • Redshift vs BigQuery vs Snowflake
  • Spark SQL에서 자주 발생하는 오류 2
  • Spark SQL과 데이터 처리
  • Oracle VM VirtualBox를 활용해서 Linux OS 설치방법
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (160)
      • python (47)
        • selenium (4)
        • algorithm (10)
        • Django (6)
        • Pandas | Numpy (22)
      • SQL (9)
      • Data Engineer (36)
      • Data Scientist (3)
      • Data Analysis (11)
      • Computer Science (36)
      • Why? (16)
      • 마음가짐 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
Spark SQL에서 자주 발생하는 오류
상단으로

티스토리툴바