Bölüm başına en sık görülen 3'lüler
Şimdi bir sorguyu daha büyük bir sorgu içinde alt sorgu olarak kullanacağız. Spark SQL, SQL'in gelişmiş özelliklerini destekler. Daha önce 12 bölümden oluşan bir kitabın tamamında en yaygın kelime dizilerini nasıl bulacağını öğrendin. Şimdi her bir bölüm için en sık görülen 3'lüleri elde edeceksin. Bunu, her grup için en üstteki satırı almak üzere bir window function kullanarak yapacaksın.
word, id, chapter sütunlarına sahip bir tablo var.
chaptersütunu bölüm numarasını ifade eder.wordsütunu belgedeki tek bir kelimeyi ifade eder.idsütunu belgedeki kelimenin konumunu ifade eder.
Ayrıca şu sorguya sahibiz:
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
Bu tablodan, istenen sonucun ilk satırının şöyle olacağını anlayabilirsin:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Görevin, subquery ifadesini daha büyük bir sorguda alt sorgu olarak kullanarak bölüm başına en sık görülen 3'lüyü elde etmek. İstenen sonuç aynı şemaya sahip olacak, ancak bölüm başına bir satır içerecek. Bölüm bazında satır numarasını elde etmek için ROW_NUMBER() kullan.
Bu egzersiz
Python ile Spark SQL'e Giriş
kursunun bir parçasıdırEgzersiz talimatları
- Bölüm başına en sık görülen 3'lüyü al.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
# 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()