[티스토리 게시글 추천 시스템 만들기] #2 크롤링해서 HDFS에 Parquet으로 저장
2021.03.24 - [✎ 21.上/Data] - [티스토리 게시글 추천 시스템 만들기] #1 계획
한글만 분석하기 위해 한글 형태소 분석기를 사용했다. 나는 이 중에 정규화까지 가능하다는 OKT를 사용했다.
tag Package — KoNLPy 0.5.2 documentation
Parameters: jvmpath – The path of the JVM passed to init_jvm(). userdic – The path to the user dictionary. This enables the user to enter custom tokens or phrases, that are mandatorily assigned to tagged as a particular POS. Each line of the dictionary
konlpy.org
사실.. HDFS에 저장할 필요도 없이 바로 HIVE로 쏠까 했는데 다 한번씩 만져보고싶어서 HDFS에 중간에 한번 저장하는 과정을 거쳤다.
from typing import List, Optional
from bs4 import BeautifulSoup
import requests
import logging
import re
from konlpy.tag import Okt
from pyspark.sql import SparkSession
from tqdm import tqdm
logger = logging.getLogger()
def analysis_nlp(texts: List) -> List:
okt = Okt()
article_pos_list = []
for text in texts:
article_pos = okt.pos(text)
if article_pos:
for pos in article_pos:
article_pos_list.append({"morpheme": [pos[1]], "text": [pos[0]]})
return article_pos_list
def get_content_main(post_num: int) -> List:
contents: List = [""] * 500
for num in tqdm(range(1, post_num)):
result = get_content(num)
if result:
contents[num]: Optional[List] = result
else:
logger.warning("존재하지 않는 게시글입니다.")
total_pos = []
for content in contents:
if content:
nlp_set: list = analysis_nlp(content)
total_pos.extend(nlp_set)
return total_pos
def get_content(post_num: int) -> Optional[List]:
url: str = "https://weejw.tistory.com/%d" % post_num
content = requests.get(url).content
logger.info("URL:%s" % url)
soup = BeautifulSoup(content, 'html.parser')
exists_post = soup.select_one('div.absent_post')
if exists_post is not None:
return None
contents = soup.select_one('div.tt_article_useless_p_margin')
if contents is None:
return None
results: str = str(contents.findAll('p'))
results: List = re.sub('<.+?>', '', results).replace("[", "").replace("]", "").split(",")
results: List = [result for result in results if (result not in ['', ' '])]
return results if results else None
def get_spark_session():
app_name = "Python Example - PySpark Parsing Dictionary as DataFrame"
master = "local"
spark = SparkSession.builder \
.appName(app_name) \
.master(master) \
.getOrCreate()
return spark
def log_init():
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
def main():
log_init()
spark = get_spark_session()
#total_pos = get_content_main(post_num=500)
#spark_df = spark.createDataFrame(total_pos)
file_path = "hdfs://localhost:9000/user/jiwonwee/crawler_data/crawler_data.parquet"
# HDFS에 파일 저장
spark_df.write.parquet(file_path)
if __name__ == '__main__':
main()
HDFS에 저장된 파일을 다시 불러와서 출력하면 다음과 같다. 굿 ^_^
spark_df = spark.read.parquet(file_path)
spark_df.show()
REFERENCES
[Python] 한국어 형태소 분석기 체험 및 비교(Okt, Mecab, Komoran, Kkma)
[Python] 한국어 형태소 분석기 체험 및 비교(Okt, Mecab, Komoran, Kkma) Published Jun 07, 2020 한국어는 영어처럼 띄어쓰기만으로 단어를 분리하면 제대로 되질 않습니다. 한국어는 어미와 조사 등이
soohee410.github.io
macOS에서 Hadoop 설치하기
rap0d.github.io
hadoop - HBase 및 Parquet 파일에 데이터 저장 - IT 툴 넷
hadoop - HBase 및 Parquet 파일에 데이터 저장 출처 hadoop hbase parquet phoenix 저는 빅 데이터를 처음 사용하고 데이터를 유지하고 검색하는 다양한 방법을 이해하려고합니다. Parquet과 HBase는 열 지향 저장
pythonq.com
apache-spark 시작하기(Macbook), spark 설치, pyspark
스파크 사용 이유는? 먼저 데이터가 엄청난 양으로 증가되며, 이를 처리하기 위해 분산 프레임워크인 Hadoop과 최근에 Spark가 많이 쓰이고 있다. Hadoop은 데이터를 수집하는 목적으로 많이 사용된
parkaparka.tistory.com