logo

PySpark SQL

Apache Spark є найуспішнішим програмним забезпеченням Apache Software Foundation, призначеним для швидких обчислень. Кілька галузей використовують Apache Spark для пошуку своїх рішень. PySpark SQL — це модуль у Spark, який інтегрує реляційну обробку з API функціонального програмування Spark. Ми можемо отримати дані за допомогою мови запитів SQL. Ми можемо використовувати запити так само, як і мову SQL.

Якщо ви маєте базове уявлення про RDBMS, PySpark SQL буде простим у використанні, де ви можете розширити обмеження традиційної реляційної обробки даних. Spark також підтримує мову запитів Hive, але існують обмеження бази даних Hive. Spark SQL було розроблено, щоб усунути недоліки бази даних Hive. Давайте розглянемо наступні недоліки Hive:

Недоліки Hive

  • Він не може відновити обробку, а це означає, що якщо виконання не вдасться посеред робочого процесу, ви не зможете продовжити з того місця, де воно застрягло.
  • Ми не можемо каскадно видаляти зашифровані бази даних, якщо ввімкнено кошик. Це призводить до помилки виконання. Щоб видалити базу даних такого типу, користувачі мають скористатися опцією Очистити.
  • Спеціальні запити виконуються за допомогою MapReduce, який запускається Hive, але коли ми аналізуємо базу даних середнього розміру, це сповільнює продуктивність.
  • Hive не підтримує операцію оновлення або видалення.
  • Він обмежений підтримкою підзапитів.

Ці недоліки є причиною розробки Apache SQL.

Короткий вступ до PySpark SQL

PySpark підтримує інтегровану реляційну обробку за допомогою функціонального програмування Spark. Він забезпечує підтримку різних джерел даних, що дає змогу поєднувати SQL-запити з перетвореннями коду, створюючи таким чином дуже потужний інструмент.

PySpark SQL встановлює зв’язок між RDD і реляційною таблицею. Він забезпечує більш тісну інтеграцію між реляційною та процедурною обробкою через декларативний API Dataframe, який інтегрований із кодом Spark.

Використовуючи SQL, він може бути легко доступним для більшої кількості користувачів і покращити оптимізацію для поточних. Він також підтримує широкий спектр джерел даних і алгоритмів у Big-data.

Особливість PySpark SQL

Функції PySpark SQL наведено нижче:

1) Доступ до узгоджених даних

Він забезпечує послідовний доступ до даних, тобто SQL підтримує загальний спосіб доступу до різноманітних джерел даних, наприклад Hive, Avro, Parquet, JSON і JDBC. Він відіграє важливу роль у підключенні всіх існуючих користувачів до Spark SQL.

2) Реєстрація з Spark

Запити PySpark SQL інтегровані з програмами Spark. Ми можемо використовувати запити всередині програм Spark.

Однією з його найбільших переваг є те, що розробникам не потрібно вручну керувати помилками стану або підтримувати синхронізацію програми з пакетними завданнями.

3) Стандартне підключення

програма простих чисел на java

Він забезпечує підключення через JDBC або ODBC, і ці два стандарти є галузевими стандартами підключення для інструментів бізнес-аналітики.

4) Функції, визначені користувачем

PySpark SQL має комбіновану мову, визначену користувачем, функцію (UDF). UDF використовується для визначення нової функції на основі стовпців, яка розширює словник DSL Spark SQL для перетворення DataFrame.

5) Сумісність Hive

PySpark SQL виконує немодифіковані запити Hive до поточних даних. Це забезпечує повну сумісність із поточними даними Hive.

Модуль SQL PySpark

Ось деякі важливі класи Spark SQL і DataFrames:

    pyspark.sql.SparkSession:Це головна точка входу для DataFrame і функціональність SQL.pyspark.sql.DataFrame:Він являє собою розподілену колекцію даних, згрупованих у іменовані стовпці.pyspark.sql.Стовпець:Він представляє вираз стовпця в a DataFrame. pyspark.sql.Рядок:Він представляє рядок даних у a DataFrame. pyspark.sql.GroupedData:Методи агрегації, повернуті DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Він представляє методи для обробки відсутніх даних (нульові значення).pyspark.sql.DataFrameStatFunctions:Він представляє методи для функціональності статистики.pysark.sql.functions:Він являє собою список вбудованих функцій, доступних для DataFrame. pyspark.sql.types:Він являє собою список доступних типів даних.pyspark.sql.Вікно:Використовується для роботи з функціями Window.

Розглянемо наступний приклад PySpark SQL.

 import findspark findspark.init() import pyspark # only run after findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df = spark.sql('''select 'spark' as hello ''') df.show() 

Вихід:

 +-----+ |hello| +-----+ |spark| +-----+ 

Пояснення коду:

У наведеному вище коді ми імпортували findspark модуль і наз findspark.init() конструктор; потім ми імпортували модуль SparkSession, щоб створити сеанс spark.

з pyspark.sql імпорт SparkSession

Сеанс spark можна використовувати для створення Dataset і DataFrame API. SparkSession також можна використовувати для створення DataFrame, реєстрації DataFrame як таблиці, виконання SQL над таблицями, кешування таблиці та читання файлу parquet.

конструктор класів

Це конструктор Spark Session.

getOrCreate()

Використовується для отримання існуючого SparkSession, або, якщо його немає, створіть новий на основі параметрів, встановлених у конструкторі.

Кілька інших методів

Нижче наведено декілька методів PySpark SQL:

1. appName(ім'я)

Він використовується для встановлення назви програми, яка відображатиметься у веб-інтерфейсі Spark. Параметр назва приймає назву параметра.

що таке оракул

2. config(key=None, value = None, conf = None)

Він використовується для налаштування параметрів конфігурації. Параметри, встановлені за допомогою цього методу, автоматично поширюються на обидва SparkConf і SparkSession конфігурація.

 from pyspark.conf import SparkConfSparkSession.builder.config(conf=SparkConf()) 

Параметри:

    ключ-Рядок імені ключа властивості конфігурації.значення-Він представляє значення властивості конфігурації.конф -Екземпляр SparkConf.

3. майстер(майстер)

Він встановлює URL-адресу spark master для підключення, наприклад «local» для локальної роботи, «local[4]» для локальної роботи з 4 ядрами.

Параметри:

    майстер:url для spark master.

4. SparkSession.catalog

Це інтерфейс, який користувач може створювати, видаляти, змінювати або запитувати базову базу даних, таблиці, функції тощо.

5. SparkSession.conf

Це інтерфейс налаштування часу виконання для spark. Це інтерфейс, за допомогою якого користувач може отримати та встановити всі конфігурації Spark і Hadoop, які стосуються Spark SQL.

клас pyspark.sql.DataFrame

Це розподілена сукупність даних, згрупованих у іменовані стовпці. DataFrame схожий на реляційну таблицю в Spark SQL, його можна створити за допомогою різних функцій у SQLContext.

 student = sqlContext.read.csv('...') 

Після створення фрейму даних ми можемо керувати ним за допомогою кількох доменно-спеціальних мов (DSL), які є попередньо визначеними функціями DataFrame. Розглянемо наступний приклад.

 # To create DataFrame using SQLContext student = sqlContext.read.parquet('...') department = sqlContext.read.parquet('...') student.filter(marks > 55).join(department, student.student_Id == department.id)  .groupBy(student.name, 'gender').({'name': 'student_Id', 'mark': 'department'}) 

Розглянемо такий приклад:

Надсилання запитів за допомогою Spark SQL

У наступному коді спочатку ми створюємо DataFrame і виконуємо SQL-запити для отримання даних. Розглянемо наступний код:

 from pyspark.sql import * #Create DataFrame songdf = spark.read.csv(r'C:UsersDEVANSH SHARMA	op50.csv', inferSchema = True, header = True) #Perform SQL queries songdf.select('Genre').show() songdf.filter(songdf['Genre']=='pop').show() 

Вихід:

 +----------------+ | Genre| +----------------+ | canadian pop| | reggaeton flow| | dance pop| | pop| | dfw rap| | pop| | trap music| | pop| | country rap| | electropop| | reggaeton| | dance pop| | pop| | panamanian pop| |canadian hip hop| | dance pop| | latin| | dfw rap| |canadian hip hop| | escape room| +----------------+ only showing top 20 rows +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name| Artist.Name|Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 6|I Don't Care (wit...| Ed Sheeran| pop| 102| 68| 80| -5| 9| 84| 220| 9| 4| 84| | 8| How Do You Sleep?| Sam Smith| pop| 111| 68| 48| -5| 8| 35| 202| 15| 9| 90| | 13| Someone You Loved|Lewis Capaldi| pop| 110| 41| 50| -6| 11| 45| 182| 75| 3| 88| | 38|Antisocial (with ...| Ed Sheeran| pop| 152| 82| 72| -5| 36| 91| 162| 13| 5| 87| | 44| Talk| Khalid| pop| 136| 40| 90| -9| 6| 35| 198| 5| 13| 84| | 50|Cross Me (feat. C...| Ed Sheeran| pop| 95| 79| 75| -6| 7| 61| 206| 21| 12| 82| +---+--------------------+-------------+-----+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ 

Використання функції groupBy().

Функція groupBy() збирає схожі дані категорії.

 songdf.groupBy('Genre').count().show() 

Вихід:

 +----------------+-----+ | Genre|count| +----------------+-----+ | boy band| 1| | electropop| 2| | pop| 7| | brostep| 2| | big room| 1| | pop house| 1| | australian pop| 1| | edm| 3| | r&b en espanol| 1| | dance pop| 8| | reggaeton| 2| | canadian pop| 2| | trap music| 1| | escape room| 1| | reggaeton flow| 2| | panamanian pop| 2| | atl hip hop| 1| | country rap| 2| |canadian hip hop| 3| | dfw rap| 2| +----------------+-----+ 

розподіл (кількість розділів, *стовпці)

The розподіл() повертає новий DataFrame, який є виразом розділення. Ця функція приймає два параметри numpartitions і *кол. The numpartitions Параметр визначає цільову кількість стовпців.

різниця між обідом і вечерею
 song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5) 

Вихід:

 +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_c0| Track.Name|Artist.Name| Genre|Beats.Per.Minute|Energy|Danceability|Loudness..dB..|Liveness|Valence.|Length.|Acousticness..|Speechiness.|Popularity| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| | 17| LA CANCI?N| J Balvin| latin| 176| 65| 75| -6| 11| 43| 243| 15| 32| 90| | 4|Beautiful People ...| Ed Sheeran| pop| 93| 65| 64| -8| 8| 55| 198| 12| 19| 86| | 5|Goodbyes (Feat. Y...|Post Malone|dfw rap| 150| 65| 58| -4| 11| 18| 175| 45| 7| 94| +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ only showing top 5 rows