You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

사용준비

import pyspark
import requests
import pandas as pd
import json
sc = pyspark.SparkContext('local[*]')

spark 객체는 분산컴퓨팅을위해 여러개를 선택할수도 있으나, 여기서는

로컬 객체 하나만 사용하겠습니다.

pyspark 는 쥬피터 notebook에서 불러온 객체이며 , sc객체를 불러오는 spark객체

샘플데이터

데일리 호텔에서 200개 데이터 획득

import requests
import json

chkein = '2018-01-18'
stays = 1
url = 'http://mobile.dailyhotel.co.kr/api/v3/hotels/sales?dateCheckIn={}&stays={}&provinceIdx=5&areaIdx=&page=1&limit=200&persons=2&details=true'.format(chkein,stays)
r = requests.get(url)
data = r.json()
hotels=data['data']['hotelSales']

기본 사용

전체 리스트를 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
addrSummaryavailableRoomscategorydiscountgradehotelIdxlatitudelongitudenameregionNamereviewCount
07hotel169900special123430.130.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)
==> 결과
['중구', '강남구', '서초구', '강서구', '구로구']

사용자 알고리즘 적용

사전준비: 사용할 알고리즘 준비하기

math-util

  • 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)






  • No labels