Konversi fungsi window dari notasi titik ke SQL
Kita akan menambahkan sebuah kolom ke jadwal kereta sehingga setiap baris berisi jumlah menit yang dibutuhkan kereta untuk mencapai pemberhentian berikutnya.
- Kita memiliki dataframe
dfdi manadf.columns == ['train_id', 'station', 'time']. dfdidaftarkan sebagai tabel SQL bernamaschedule.- Fungsi window berikut menggunakan notasi titik. Kueri ini menghasilkan dataframe baru
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)
Perhatikan penggunaan fungsi unix_timestamp, yang setara dengan fungsi SQL UNIX_TIMESTAMP.
Harap perhatikan scaffolding pada kode contoh. Memformat jawaban sesuai scaffolding akan memastikan jawaban Anda tidak ditolak karena masalah pemformatan.
Latihan ini adalah bagian dari kursus
Pengantar Spark SQL dalam Python
Petunjuk latihan
- Buat kueri SQL untuk memperoleh hasil yang identik dengan
dot_df. Harap format kueri sesuai dengan scaffolding (yaitu garis bawah placeholder_____).
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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()