간단한 듯 하면서 계속 기억이 안나고,, 찾아보게 된다.
▼ 날짜에 더하기 빼기
가장 많이 사용하게 되는 로직이 이 날짜에서 5일 후, 일주일 전 날짜 계산해줘! 이다.
이때 사용하게 되는게 datetime의 timedelta이다.
from datetime import timedelta, date
basic_date = date.today()
하루 뒤 = basic_date + timedelta(days=1)
일주일 전 = basic_date - timedelta(weeks=1)
▼ PySpark 날짜 다루기
pyspark에서는 방식이 또 다르다.
Spark date_format() – Convert Date to String format
In this tutorial, we will show you a Spark SQL example of how to convert Date to String format using date_format() function on DataFrame with Scala language. date_format() - function formats Date to String format. Syntax: date_format(date:Column,format:S
sparkbyexamples.com
PySpark to_date() – Convert String to Date Format
PySpark SQL function provides to_date() function to convert String to Date fromat of a DataFrame column. Note that Spark Date Functions support all Java Date formats specified in DateTimeFormatter. to_date() - function is used to format string (StringType)
sparkbyexamples.com
secdate = timedelta(int(opendate)) + timedelta(7)
secdate = str(secdate).split(' ')[0]
open_audi_df.select('OPEN_AUDI_CNT', 'STD_DATE',
date_add('STD_DATE', 7)).show()
movie_detail_sec_audi_df = movie_detail.join(
movie_box_office, on=['MOVIE_CODE', 'MOVIE_NAME'], how='left')
sec_audi_df = movie_detail_sec_audi_df.select('MOVIE_CODE', movie_detail_open_audi_df.AUDI_CNT.alias('SEC_AUDI_CNT'))\
.where(movie_detail_open_audi_df.STD_DATE == '20220802')
# .where(movie_detail_open_show.OPEN_DATE == secdate)
audi_df = open_audi_df.join(
sec_audi_df, on=['MOVIE_CODE'], how='left')
audi_df.select('MOVIE_CODE', 'MOVIE_NAME', 'OPEN_AUDI_CNT', ((
audi_df.SEC_AUDI_CNT-audi_df.OPEN_AUDI_CNT)/audi_df.OPEN_AUDI_CNT).alias('SEC_AUDI_INCREASE')).show()
movie_detail = movie_detail.to_pandas_on_spark()
for dt in movie_detail.values:
print(dt)
cls.movie_codes.append(dt[0])
cls.movie_names.append(dt[1])
cls.open_dates.append(dt[2])
for i in range(len(cls.movie_codes)):
code = cls.movie_codes[i]
opendate = cls.open_dates[i]
secdate = timedelta(int(opendate)) + timedelta(7)
secdate = str(secdate).split(' ')[0]
taget_table = movie_box_office.select('MOVIE_CODE', 'STD_DATE', 'AUDI_CNT') \
.where((movie_box_office.MOVIE_CODE == code))
# open_audi = taget_table.select('AUDI_CNT') \
# .where(DBO_table.STD_DATE == opendate).collect()
open_audi = taget_table.select('AUDI_CNT') \
.where(movie_box_office.STD_DATE == '20220801').collect()
open_audi_cnt = open_audi[0]['AUDI_CNT']
print(type(open_audi_cnt), open_audi_cnt)
cls.open_audi_cnts.append(open_audi_cnt)
# sec_audi = taget_table.select('AUDI_CNT') \
# .where(DBO_table.STD_DATE == secdate).collect()
sec_audi = taget_table.select('AUDI_CNT') \
.where(movie_box_office.STD_DATE == '20220802').collect()
sec_audi_cnt = sec_audi[0]['AUDI_CNT']
print(type(sec_audi_cnt), sec_audi_cnt)
increase_ratio = round(
((sec_audi_cnt - open_audi_cnt) / open_audi_cnt * 100), 3)
print(increase_ratio)
cls.increase_ratios.append(increase_ratio)
MA_df = pd.DataFrame({
'MOVIE_CODE': cls.movie_codes,
'MOVIE_NAME': cls.movie_names,
'OPEN_AUDI_CNT': cls.open_audi_cnts,
'SEC_AUDI_INCREASE': cls.increase_ratios
})
MA_df = get_spark_session().createDataFrame(MA_df)
hit_df = movie_hit.select('MOVIE_CODE', 'HIT_GRADE')
movie_audi_df = MA_df.join(hit_df, on='MOVIE_CODE', how='left')
save_data(DataMart, movie_audi_df, 'MOVIE_AUDI')
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 도로명 주소 위도,경도로 전환하기 (지오코딩) (0) | 2022.11.02 |
---|---|
[Pandas] 빈 Dataframe생성 및 데이터 행 삽입 (0) | 2022.10.18 |
[Python] 'ResultSet' object is not callable 에러 해결 (0) | 2022.08.23 |
[Python] folium 지도 그리기 (iframe 속성) (0) | 2022.08.20 |
[Pandas] 데이터프레임 인덱스 새로 설정하기(내포for문) (0) | 2022.08.20 |
간단한 듯 하면서 계속 기억이 안나고,, 찾아보게 된다.
▼ 날짜에 더하기 빼기
가장 많이 사용하게 되는 로직이 이 날짜에서 5일 후, 일주일 전 날짜 계산해줘! 이다.
이때 사용하게 되는게 datetime의 timedelta이다.
from datetime import timedelta, date
basic_date = date.today()
하루 뒤 = basic_date + timedelta(days=1)
일주일 전 = basic_date - timedelta(weeks=1)
▼ PySpark 날짜 다루기
pyspark에서는 방식이 또 다르다.
Spark date_format() – Convert Date to String format
In this tutorial, we will show you a Spark SQL example of how to convert Date to String format using date_format() function on DataFrame with Scala language. date_format() - function formats Date to String format. Syntax: date_format(date:Column,format:S
sparkbyexamples.com
PySpark to_date() – Convert String to Date Format
PySpark SQL function provides to_date() function to convert String to Date fromat of a DataFrame column. Note that Spark Date Functions support all Java Date formats specified in DateTimeFormatter. to_date() - function is used to format string (StringType)
sparkbyexamples.com
secdate = timedelta(int(opendate)) + timedelta(7)
secdate = str(secdate).split(' ')[0]
open_audi_df.select('OPEN_AUDI_CNT', 'STD_DATE',
date_add('STD_DATE', 7)).show()
movie_detail_sec_audi_df = movie_detail.join(
movie_box_office, on=['MOVIE_CODE', 'MOVIE_NAME'], how='left')
sec_audi_df = movie_detail_sec_audi_df.select('MOVIE_CODE', movie_detail_open_audi_df.AUDI_CNT.alias('SEC_AUDI_CNT'))\
.where(movie_detail_open_audi_df.STD_DATE == '20220802')
# .where(movie_detail_open_show.OPEN_DATE == secdate)
audi_df = open_audi_df.join(
sec_audi_df, on=['MOVIE_CODE'], how='left')
audi_df.select('MOVIE_CODE', 'MOVIE_NAME', 'OPEN_AUDI_CNT', ((
audi_df.SEC_AUDI_CNT-audi_df.OPEN_AUDI_CNT)/audi_df.OPEN_AUDI_CNT).alias('SEC_AUDI_INCREASE')).show()
movie_detail = movie_detail.to_pandas_on_spark()
for dt in movie_detail.values:
print(dt)
cls.movie_codes.append(dt[0])
cls.movie_names.append(dt[1])
cls.open_dates.append(dt[2])
for i in range(len(cls.movie_codes)):
code = cls.movie_codes[i]
opendate = cls.open_dates[i]
secdate = timedelta(int(opendate)) + timedelta(7)
secdate = str(secdate).split(' ')[0]
taget_table = movie_box_office.select('MOVIE_CODE', 'STD_DATE', 'AUDI_CNT') \
.where((movie_box_office.MOVIE_CODE == code))
# open_audi = taget_table.select('AUDI_CNT') \
# .where(DBO_table.STD_DATE == opendate).collect()
open_audi = taget_table.select('AUDI_CNT') \
.where(movie_box_office.STD_DATE == '20220801').collect()
open_audi_cnt = open_audi[0]['AUDI_CNT']
print(type(open_audi_cnt), open_audi_cnt)
cls.open_audi_cnts.append(open_audi_cnt)
# sec_audi = taget_table.select('AUDI_CNT') \
# .where(DBO_table.STD_DATE == secdate).collect()
sec_audi = taget_table.select('AUDI_CNT') \
.where(movie_box_office.STD_DATE == '20220802').collect()
sec_audi_cnt = sec_audi[0]['AUDI_CNT']
print(type(sec_audi_cnt), sec_audi_cnt)
increase_ratio = round(
((sec_audi_cnt - open_audi_cnt) / open_audi_cnt * 100), 3)
print(increase_ratio)
cls.increase_ratios.append(increase_ratio)
MA_df = pd.DataFrame({
'MOVIE_CODE': cls.movie_codes,
'MOVIE_NAME': cls.movie_names,
'OPEN_AUDI_CNT': cls.open_audi_cnts,
'SEC_AUDI_INCREASE': cls.increase_ratios
})
MA_df = get_spark_session().createDataFrame(MA_df)
hit_df = movie_hit.select('MOVIE_CODE', 'HIT_GRADE')
movie_audi_df = MA_df.join(hit_df, on='MOVIE_CODE', how='left')
save_data(DataMart, movie_audi_df, 'MOVIE_AUDI')
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 도로명 주소 위도,경도로 전환하기 (지오코딩) (0) | 2022.11.02 |
---|---|
[Pandas] 빈 Dataframe생성 및 데이터 행 삽입 (0) | 2022.10.18 |
[Python] 'ResultSet' object is not callable 에러 해결 (0) | 2022.08.23 |
[Python] folium 지도 그리기 (iframe 속성) (0) | 2022.08.20 |
[Pandas] 데이터프레임 인덱스 새로 설정하기(내포for문) (0) | 2022.08.20 |