점 표기법의 window 함수를 SQL로 변환하기
각 열에 다음 정차역까지 걸리는 시간을 분 단위로 담는 열을 열차 시간표에 추가해 보겠습니다.
- 데이터프레임
df가 있으며,df.columns == ['train_id', 'station', 'time']입니다. df는schedule이라는 이름의 SQL 테이블로 등록되어 있습니다.- 다음 window 함수 쿼리는 점 표기법을 사용합니다. 이 코드는 새로운 데이터프레임
dot_df를 생성합니다.
window = Window.partitionBy('train_id').orderBy('time')
dot_df = df.withColumn('diff_min',
(unix_timestamp(lead('time', 1).over(window),'H:m')
- unix_timestamp('time', 'H:m'))/60)
unix_timestamp 함수는 SQL의 UNIX_TIMESTAMP 함수와 동등함에 유의하세요.
샘플 코드의 스캐폴딩을 유의해서 확인해 주세요. 스캐폴딩(밑줄 _____ 자리표시자)에 맞춰 답안을 작성해야 서식 문제로 오답 처리되지 않습니다.
이 연습은 강의의 일부입니다
Python에서 Spark SQL 입문
연습 안내
dot_df와 동일한 결과를 얻는 SQL 쿼리를 작성하세요. 쿼리는 스캐폴딩(즉, 밑줄 자리표시자_____)에 맞춰 서식을 지켜 주세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Create a SQL query to obtain an identical result to dot_df
query = """
SELECT *,
(____(____(time, 1) ____ (____ BY train_id ____ BY time),'H:m')
- ____(time, 'H:m'))/60 AS diff_min
FROM schedule
"""
sql_df = spark.sql(query)
sql_df.show()