Для универа мне нужно проанализировать список паролей, который выглядит примерно так:
username1@provider1.ch
username2@provider1.ch
username3@provider2.ch
....
Я запрашиваю свои данные на Zeppelin, где я создал TempView с именем pwned. В следующих параграфах я использую интерпретатор %sql
для запроса TempView.
%pyspark
from pyspark.sql.types import (StructField, StringType, StructType)
df = spark.read.format("csv").option("delimiter", "\t").load('/user/zeppelin/part-m-00000').toDF("username","password")
df.createOrReplaceTempView("pwned")
Например, вот 10 самых популярных паролей для Швейцарии:
Я бы хотел добиться запроса, в котором я отфильтровал список TLD и посчитал их. Так что-то вроде этого:
|---------------------|------------------|
| Country | Count |
|---------------------|------------------|
| %@%.ch | 12 |
|---------------------|------------------|
| %@%.com | 122 |
|---------------------|------------------|
Как бы я достиг этого, используя Spark SQL?
Я также смотрю на наиболее уязвимых поставщиков бесплатной электронной почты в Швейцарии. Запрос также возвращает все случаи, которые не равны нулю, и добавляет их в список. Есть ли способ игнорировать это? Кроме того, как мне рассчитать процент записей?
%sql
SELECT
CASE
WHEN username LIKE '%@bluewin.ch' THEN 'Bluewin'
WHEN username LIKE '%@hotmail.ch' THEN 'Hotmail'
WHEN username LIKE '%@gmx.ch' THEN 'GMX'
WHEN username LIKE '%@hispeed.ch' THEN 'Hispeed'
WHEN username LIKE '@epost.ch' THEN 'Epost'
END AS Provider
, COUNT(*) AS Count
, COUNT(username LIKE '@....ch')/COUNT(*) AS Percentage
FROM pwned
GROUP BY
CASE
WHEN username LIKE '%@bluewin.ch' THEN 'Bluewin'
WHEN username LIKE '%@hotmail.ch' THEN 'Hotmail'
WHEN username LIKE '%@gmx.ch' THEN 'GMX'
WHEN username LIKE '%@hispeed.ch' THEN 'Hispeed'
WHEN username LIKE '@epost.ch' THEN 'Epost'
END
Результат, который я получаю из запроса выше:
Спасибо за любые предложения или помощь!