3-tuple tersering per bab
Sekarang kita akan menggunakan sebuah kueri sebagai subkueri di dalam kueri yang lebih besar. Spark SQL mendukung fitur-fitur lanjutan SQL. Sebelumnya Anda telah mempelajari cara menemukan urutan kata yang paling umum pada keseluruhan buku yang memiliki 12 bab. Sekarang Anda akan memperoleh 3-tuple yang paling sering muncul untuk masing-masing dari 12 bab. Anda akan melakukannya dengan menggunakan window function untuk mengambil baris teratas per grup.
Terdapat sebuah tabel dengan kolom word, id, chapter.
- Kolom
chapterberisi nomor bab. - Kolom
wordberisi satu kata dalam dokumen. - Kolom
idberisi posisi kata dalam dokumen.
Kita juga memiliki kueri berikut:
subquery = """
SELECT chapter, w1, w2, w3, COUNT(*) as count
FROM
(
SELECT
chapter,
word AS w1,
LEAD(word, 1) OVER(PARTITION BY chapter ORDER BY id ) AS w2,
LEAD(word, 2) OVER(PARTITION BY chapter ORDER BY id ) AS w3
FROM text
)
GROUP BY chapter, w1, w2, w3
ORDER BY chapter, count DESC
"""
spark.sql(subquery).show(5)
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
| 1|one| of| the| 6|
| 1| in|front| of| 5|
| 1| up| and|down| 5|
| 1| it| was| a| 5|
+-------+---+-----+----+-----+
only showing top 5 rows
Dari tabel ini Anda dapat menentukan bahwa baris pertama dari hasil yang diinginkan adalah:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Tugas Anda adalah menggunakan subquery sebagai subkueri dalam kueri yang lebih besar untuk memperoleh 3-tuple tersering per bab. Hasil yang diinginkan akan memiliki skema yang sama, tetapi hanya satu baris per bab. Gunakan ROW_NUMBER() untuk memperoleh nomor baris per baris per bab.
Latihan ini adalah bagian dari kursus
Pengantar Spark SQL dalam Python
Petunjuk latihan
- Dapatkan 3-tuple tersering per bab.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# Most frequent 3-tuple per chapter
query = """
SELECT chapter, w1, w2, w3, count FROM
(
SELECT
chapter,
____() OVER (PARTITION BY chapter ORDER BY ____ DESC) AS row,
w1, w2, w3, count
FROM ( %s )
)
WHERE row = ____
ORDER BY chapter ASC
""" % subquery
spark.sql(query).show()