seoyeong200 / Book-data-Pipeline

책 줄거리를 기반으로 비슷한 책을 추천해주는 서비스를 위한 데이터 파이프라인입니다. 도커 환경에서 파이프라인을 구성하여 스파크를 사용해 배치 데이터를 처리합니다.
1 stars 0 forks source link
aws docker ml spark web-scraping

Book data pipeline Project

매주 인기있는 도서 중 사용자가 선호하는 책과 비슷한 책을 추천해주는 서비스를 위한 파이프라인입니다.

Pipeline Architecture

매주 화요일 네이버 책으로부터 카테고리별 top100 책 정보를 스크래핑하여 aws dynamodb 에 수집합니다. 수집된 테이블 데이터는 aws s3 버킷에 export되고, spark를 통해 전처리와 줄거리 문서의 벡터화 작업이 진행됩니다.

요청받은 책에 대해 비슷한 책을 추천 결과로 반환합니다. 이는 네이버 책에 명시된 책 줄거리 문서 데이터 간의 유사성을 기반으로 합니다.

ETL process

img

invoke.sh {concurrency_level}

project structure

.
├── Dockerfile                  // lambda with docker - contain packages, dependency which is needed for web scrapping
├── Dockerfile_from_scratch     // entire version of above file
├── infrastructure              // for local spark cluster
│   ├── Dockerfile              // spark image
│   ├── apps                    // data processing, modelling pyspark script 
│   │   ├── __init__.py
│   │   ├── main.py
│   │   ├── preprocess.py
│   │   └── tfidf.py
│   ├── dev                     // spark local test environment (spark+jupyter)
│   │   ├── Dockerfile
│   │   └── docker-compose.yml
│   ├── docker-compose.yml
│   ├── docker-compose_deprecated.yml
│   ├── materials               // spark connector things for communicate with aws s3
│   │   ├── conf
│   │   │   ├── core-site.xml
│   │   │   └── spark-defaults.conf
│   │   └── jars
│   │       ├── aws-java-sdk-bundle-1.11.375.jar
│   │       └── hadoop-aws-3.2.0.jar
│   ├── spark-submit.sh         // execute spark cluster, submit data processing spark jobs
│   └── start-spark.sh          // spark cluster entrypoint shellscript
├── invoke.sh                   // project entrypoint - execute ETL pipeline
├── serverless.yml              // deploy lamdba in aws cluster
└── src
    ├── __init__.py
    ├── etl
    │   ├── __init__.py
    │   ├── crawling                      // scrapper object
    │   │   ├── __init__.py
    │   │   ├── book_data_scrapper.py 
    │   │   └── book_url_getter.py
    │   ├── dynamo_tables.py               // dynamoDB object
    │   ├── handler.py                     // lambda entrypoint
    │   └── utils                          // utility related codebase, static file that has lists of book category 
    │       ├── __init__.py
    │       ├── config.py
    │       └── static
    │           └── book_category_url.json
    └── test
        ├── __init__.py
        └── test_handler.py