사용준비
import pyspark import requests import pandas as pd import json sc = pyspark.SparkContext('local[*]')
spark 객체는 분산컴퓨팅을위해 여러개를 선택할수도 있으나, 여기서는
로컬 객체 하나만 사용하겠습니다.
pyspark 는 쥬피터 notebook에서 불러온 객체이며 , sc객체를 불러오는 spark객체
샘플데이터
데일리 호텔에서 200개 데이터 획득
기본 사용
전체 리스트를 Spark 병렬처리용 RDD로 변환
hotellist_sc = sc.parallelize(hotels)
이렇게 변환하는 이유는, 대용량 데이터의 복잡한 분산 연산처리를
스파크 API를 통해 간편하게 사용하기 위함이다.
Spark RDD를 전체 리스트로 반환
hotellist_sc.collect()
SparkData의 시각화
Spark에서 처리된 데이터를 시각화하거나? 엑셀에 저장할때 이용합니다.
df = pd.read_json( json.dumps(hotellist_sc.collect() ) ) df
addrSummary | availableRooms | category | discount | grade | hotelIdx | latitude | longitude | name | regionName | reviewCount |
---|---|---|---|---|---|---|---|---|---|---|
0 | 7 | hotel | 169900 | special1 | 234 | 30.1 | 30.1 | 메이필드호텔 | 서울 | 223 |
여기서 의미 있는 값이 무엇인지? 필드명을 파악합니다.
필요하면 엑셀로도 저장해줍니다.
df.to_excel('output.xls', index=False)
Spark RDD 기본 API
SQL문을 사용하지 않고, RDD API를 사용하는이유
필터-비싼호텔 찾기
expesiveHotel = hotellist_sc.filter( lambda row : row['discount'] > 300000 ) #전체를 다 가져오거나? expesiveHotel.collect() #특정 개수만 획득 expesiveHotel.take(5) ==> 데이터 예 [{'addrSummary': '강남 | 삼성역 도보 1분', 'availableRooms': 5, 'displayText': '서울 > 파크 하얏트 서울', 'distance': 0.0, 'districtName': '강남구',
중복제거-호텔 관리데이터 확인
grades = hotellist_sc.map( lambda row: row['grade'] ).distinct() grades.take(5) ==> 결과 : 해당 데이터가 관리하는 grade파악이 가능합니다. ['special1', 'special2', 'grade2', 'motel', 'design'] regions = hotellist_sc.map( lambda row: row['districtName'] ).distinct() regions.take(5) ==> 결과 ['중구', '강남구', '서초구', '강서구', '구로구']
사용자 알고리즘 적용
사전준비: 사용할 알고리즘 준비하기
getDistance(
52.2296756
,
21.0122287
,
52.406374
,
16.9251681
)
- edit_distance('강남호텔', '강남호텔a')
근처 호텔찾기
#서울의 어느 호텔 'latitude': 37.5700718, 'longitude': 127.0089115 nearHotel= hotellist_sc.filter( lambda row : 5 > getDistance(37.5700718,127.0089115,row['latitude'],row['longitude'] ) ) nearHotel.take(10) nearHotel.count()
비슷한 이름 호텔찾기
siHotel = hotellist_sc.filter( lambda row : 2 > edit_distance('호텔 리안 A',row['name'] ) ) siHotel.take(100)