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은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.