process_gold_news.py json으로 하드에 저장
2026. 1. 27. 13:58ㆍ카테고리 없음
query = df_final.select("title","formatted_date","link").writeStream \
.outputMode("append") \
.format("json") \
.option("path", "scraper/data/gold_news") \
.option("checkpointLocation","scraper/data/checkpoints") \
.start()
1. df_final.select(...) (필요한 것만 골라내기)
- 데이터프레임에는 처음에 쓰던 임시 컬럼들(json_string, value 등)이 섞여 있을 수 있습니다.
- "딱 내가 필요한 깔끔한 데이터(제목, 날짜, 링크) 3개만 남겨서 저장하겠다"는 뜻입니다.
2. .writeStream (스트리밍 저장 시작)
- 일반적인 write()는 한 번 저장하고 끝납니다.
- writeStream은 "수도꼭지"를 트는 것과 같습니다. 데이터가 들어올 때마다 계속해서 저장 작업을 수행하라는 명령어입니다.
3. .outputMode("append") (덧붙이기 모드)
- 새로운 뉴스가 들어오면 기존 파일에 덮어쓰거나 지우지 않고, "맨 뒤에 계속 추가(Append)" 하라는 뜻입니다.
- 로그 데이터나 뉴스처럼 시간이 지나며 쌓이는 데이터는 무조건 append를 씁니다.
4. .format("json") (저장 형식)
- 파일을 어떤 모양으로 저장할지 정합니다. (csv, parquet, json 등)
- json으로 하면 사람이 눈으로 읽기도 편하고, 나중에 AI 학습용으로 불러오기도 좋습니다.
5. .option("path", "...") (창고 위치)
- 실제 데이터 파일이 저장될 폴더 경로입니다.
- Spark는 여기에 part-00000-...json 같은 이름으로 작은 파일들을 계속 만들어냅니다.
6. .option("checkpointLocation", "...") (★ 세이브 포인트)
- 가장 중요한 설정입니다. 게임의 "세이브 파일"과 같습니다.
- 만약 컴퓨터가 꺼졌다가 다시 켜지면, Spark는 이 폴더를 열어봅니다.
- "아, 내가 지난번에 105번째 뉴스까지 저장했구나. 그럼 106번째부터 다시 시작해야지!"
- 이게 없으면 처음부터 다시 저장해서 데이터 중복(똑같은 뉴스 2개)이 발생하거나 오류가 납니다.
7. .start() (가동!)
- 모든 설정이 끝났으니 "이제 실행해!" 라고 버튼을 누르는 것입니다.
- 이 함수가 실행되면 query라는 변수에 "작업 제어권"을 넘겨주고, 백그라운드에서 저장이 시작
반응형