Spark에서 Text data source supports only a single column, and you have 2 columns 에러 메시지

다시 글쓰기를 새로 시작해보려고 합니다. 잘 정리된 글보다는 개발 중에서 발생하는 이슈 기술적인  이슈 처리 위주로 숏하게 써보려고 합니다. 안하는 것보다는 조금이라도 하는게 좋다라는 생각으로 진행합니다.

Spark에서 기존 잘 실행되고 있는 프로그램을 복사해서 몇가지 수정한 후 실행 시 다음과 같은 에러가 발생 하였습니다.

1
"Text data source supports only a single column, and you have 2 columns"

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
val partitions = Seq("date_kst", "shop_id")
val df = spark.read()
  .format("iceberg")
  .load("tableName")
  .filter(col("date") === lit(filterDate))
  .select(col("date_kst"), col("shop_id"), col("col1"), col("col2"))
df.write
  .option("path", outputDir)
  .option("compression", "gzip")
  .format("text")
  .mode("append")
  .partitionBy(partitions: _*)
  .save()

원인

위 에러 메시지는 Spark job 결과를 Text 파일로 저장할 경우 발생할 수 있는 에러 메시지인데 내용은 다음과 같습니다.

  • Output 포맷이 Text 인 경우 Text 포맷으로 출력하는 포맷터의 입력은 컬럼이 1개라야 한다.
    • "Text data source supports only a single column"
  • 실행된 Job의 출력은  2개의 컬럼이다.
    • "you have 2 columns"

뒷부분은 "2 columns" 부분은 작성된 코드에 따라 N columns로 표현될 수 있습니다.

복사 대상이 된 소스 코드는 partition 컬럼과, select 절이 다음과 같이 되어 있었습니다.

1
2
val partitions = Seq("date_kst", "shop_id", "col1")
val df = ...select(col("date_kst"), col("shop_id"), col("col1"))

복사 해서 수정한 코드(에러가 발생한 코드)는 결과 데이터의 파티션 중 마지막 하나를 제거해 달라는 요청으로 다음과 같이 수정했습니다.

1
2
val partitions = Seq("date_kst", "shop_id")
val df = ...select(col("date_kst"), col("shop_id"), col("col1"))

파티션 변경만 있었으니 단순하게 파티션 설정 부분만 변경 하였는데 위와 같은 에러가 발생하였습니다. 꼼꼼하게 살펴보면 찾을 수 있겠지만 이런 생각지도 않은 에러가 발생하면 쓸데 없이 많은 시간을 낭비하게 되죠. 삽질하게 된다는...


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.