Spark에서 Text data source supports only a single column, and you have 2 columns 에러 메시지
다시 글쓰기를 새로 시작해보려고 합니다. 잘 정리된 글보다는 개발 중에서 발생하는 이슈 기술적인 이슈 처리 위주로 숏하게 써보려고 합니다. 안하는 것보다는 조금이라도 하는게 좋다라는 생각으로 진행합니다.
Spark에서 기존 잘 실행되고 있는 프로그램을 복사해서 몇가지 수정한 후 실행 시 다음과 같은 에러가 발생 하였습니다.
"Text data source supports only a single column, and you have 2 columns"소스 코드
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 절이 다음과 같이 되어 있었습니다.
val partitions = Seq("date_kst", "shop_id", "col1")
val df = ...select(col("date_kst"), col("shop_id"), col("col1"))복사 해서 수정한 코드(에러가 발생한 코드)는 결과 데이터의 파티션 중 마지막 하나를 제거해 달라는 요청으로 다음과 같이 수정했습니다.
val partitions = Seq("date_kst", "shop_id")
val df = ...select(col("date_kst"), col("shop_id"), col("col1"))파티션 변경만 있었으니 단순하게 파티션 설정 부분만 변경 하였는데 위와 같은 에러가 발생하였습니다. 꼼꼼하게 살펴보면 찾을 수 있겠지만 이런 생각지도 않은 에러가 발생하면 쓸데 없이 많은 시간을 낭비하게 되죠. 삽질하게 된다는...