logo

PySpark SQL

Apache Spark, Apache Software Foundation'ın en başarılı yazılımıdır ve hızlı bilgi işlem için tasarlanmıştır. Birçok endüstri, çözümlerini bulmak için Apache Spark'ı kullanıyor. PySpark SQL, Spark'ta ilişkisel işlemeyi Spark'ın işlevsel programlama API'si ile bütünleştiren bir modüldür. Verileri SQL sorgu dili kullanarak çıkarabiliriz. Sorguları SQL diliyle aynı şekilde kullanabiliriz.

RDBMS hakkında temel bilgiye sahipseniz, geleneksel ilişkisel veri işlemenin sınırlamalarını genişletebileceğiniz PySpark SQL'in kullanımı kolay olacaktır. Spark ayrıca Hive Sorgu Dili'ni de destekler ancak Hive veritabanının sınırlamaları vardır. Spark SQL, Hive veritabanının dezavantajlarını ortadan kaldırmak için geliştirildi. Hive'ın aşağıdaki dezavantajlarına bir göz atalım:

Hive'ın dezavantajları

  • İşleme devam edemez, yani iş akışının ortasında yürütme başarısız olursa, kaldığı yerden devam edemezsiniz.
  • Çöp kutusu etkinleştirildiğinde şifrelenmiş veritabanlarını kademeli olarak bırakamayız. Uygulama hatasına yol açar. Bu tür bir veritabanını bırakmak için kullanıcıların Temizleme seçeneğini kullanması gerekir.
  • Anlık sorgular Hive tarafından başlatılan MapReduce kullanılarak yürütülüyor ancak orta büyüklükteki veritabanını analiz ettiğimizde performansı geciktiriyor.
  • Hive, güncelleme veya silme işlemini desteklemez.
  • Alt sorgu desteğiyle sınırlıdır.

Bu dezavantajlar Apache SQL'in geliştirilmesinin nedenleridir.

PySpark SQL Kısa Tanıtım

PySpark, Spark'ın işlevsel programlamasıyla entegre ilişkisel işlemeyi destekler. SQL sorgularını kod dönüşümleriyle birleştirmeyi mümkün kılmak için çeşitli veri kaynaklarına destek sağlar, böylece çok güçlü bir araç ortaya çıkar.

PySpark SQL, RDD ile ilişkisel tablo arasındaki bağlantıyı kurar. Spark koduyla entegre olan bildirimsel Dataframe API aracılığıyla ilişkisel ve prosedürel işleme arasında çok daha yakın entegrasyon sağlar.

SQL kullanılarak daha fazla kullanıcıya kolayca erişilebilir ve mevcut kullanıcılar için optimizasyon iyileştirilebilir. Aynı zamanda Büyük Verideki çok çeşitli veri kaynaklarını ve algoritmaları da destekler.

PySpark SQL'in Özelliği

PySpark SQL'in özellikleri aşağıda verilmiştir:

1) Tutarlı Veri Erişimi

Tutarlı veri erişimi sağlar; bu, SQL'in aşağıdakiler gibi çeşitli veri kaynaklarına erişmenin paylaşılan bir yolunu desteklediği anlamına gelir: Hive, Avro, Parquet, JSON ve JDBC. Mevcut tüm kullanıcıların Spark SQL'e uyum sağlamasında önemli bir rol oynar.

2) Spark'a Kuruluş

turbo c++ indir

PySpark SQL sorguları Spark programlarıyla entegredir. Spark programlarının içindeki sorguları kullanabiliriz.

En büyük avantajlarından biri, geliştiricilerin durum hatasını manuel olarak yönetmelerine veya uygulamayı toplu işlerle senkronize tutmalarına gerek olmamasıdır.

3) Standart Bağlantı

JDBC veya ODBC aracılığıyla bağlantı sağlar ve bu ikisi, iş zekası araçlarına yönelik bağlantıya yönelik endüstri standartlarıdır.

4) Kullanıcı Tanımlı Fonksiyonlar

PySpark SQL, birleştirilmiş Kullanıcı Tanımlı İşleve (UDF'ler) sahiptir. UDF, DataFrame'i dönüştürmek için Spark SQL'in DSL kelime dağarcığını genişleten yeni bir sütun tabanlı işlevi tanımlamak için kullanılır.

5) Kovan Uyumluluğu

PySpark SQL, mevcut veriler üzerinde değiştirilmemiş Hive sorgularını çalıştırır. Mevcut Hive verileriyle tam uyumluluk sağlar.

PySpark SQL Modülü

Spark SQL ve DataFrames'in bazı önemli sınıfları şunlardır:

    pyspark.sql.SparkSession:için ana giriş noktasını temsil eder. Veri çerçevesi ve SQL işlevselliği.pyspark.sql.DataFrame:Adlandırılmış sütunlar halinde gruplandırılmış dağıtılmış bir veri koleksiyonunu temsil eder.pyspark.sql.Column:Bir sütun ifadesini temsil eder Veri çerçevesi. pyspark.sql.Row:Bir dizi veriyi temsil eder Veri çerçevesi. pyspark.sql.GroupedData:Toplama yöntemleri, tarafından döndürüldü DataFrame.groupBy(). pyspark.sql.DataFrameNaFunctions:Eksik verileri (boş değerler) işleme yöntemlerini temsil eder.pyspark.sql.DataFrameStatFunctions:İstatistik işlevselliğine yönelik yöntemleri temsil eder.pysark.sql.fonksiyonları:Kullanılabilen yerleşik işlevlerin bir listesini temsil eder. Veri çerçevesi. pyspark.sql.types:Mevcut veri türlerinin bir listesini temsil eder.pyspark.sql.Pencere:Pencere fonksiyonlarıyla çalışmak için kullanılır.

Aşağıdaki PySpark SQL örneğini düşünün.

 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() 

Çıktı:

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

Kod Açıklaması:

Yukarıdaki kodda, içe aktardık Buluntu parkı modül ve çağrıldı findpark.init() yapıcı; daha sonra spark session oluşturmak için SparkSession modülünü içe aktardık.

pyspark.sql'den SparkSession'ı içe aktarın

Dataset ve DataFrame API'yi oluşturmak için bir kıvılcım oturumu kullanılabilir. SparkSession ayrıca DataFrame oluşturmak, DataFrame'i tablo olarak kaydetmek, tablolar üzerinde SQL yürütmek, tabloyu önbelleğe almak ve parke dosyasını okumak için de kullanılabilir.

sınıf oluşturucu

Java'da miras

Spark Session'ın kurucusudur.

getOrCreate()

Mevcut olanı almak için kullanılır SparkSession, veya mevcut bir tane yoksa oluşturucuda ayarlanan seçeneklere göre yeni bir tane oluşturun.

Diğer Birkaç Yöntem

PySpark SQL'in birkaç yöntemi aşağıdaki gibidir:

1.uygulamaAdı(isim)

Spark web kullanıcı arayüzünde görüntülenecek uygulamanın adını ayarlamak için kullanılır. Parametre isim parametrenin adını kabul eder.

2. config(anahtar=Yok, değer = Yok, conf = Yok)

Bir yapılandırma seçeneğini ayarlamak için kullanılır. Bu yöntem kullanılarak ayarlanan seçenekler otomatik olarak her ikisine de yayılır. SparkConf Ve SparkSession yapılandırması.

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

Parametreler:

    anahtar-Bir yapılandırma özelliğinin anahtar adı dizesi.değer-Bir konfigürasyon özelliğinin değerini temsil eder.yapılandırma -SparkConf'un bir örneği.

3. usta(usta)

Bağlanılacak spark ana URL'sini, örneğin yerel olarak çalışacak şekilde 'yerel', 4 çekirdekle yerel olarak çalışacak şekilde 'yerel[4]' olarak ayarlar.

Parametreler:

    usta:spark master'ın URL'si.

4. SparkSession.catalog

Kullanıcının temel veritabanını, tabloları, işlevleri vb. oluşturabileceği, bırakabileceği, değiştirebileceği veya sorgulayabileceği bir arayüzdür.

5. SparkSession.conf

Spark için çalışma zamanı yapılandırma arayüzüdür. Bu, kullanıcının Spark SQL ile ilgili tüm Spark ve Hadoop yapılandırmalarını alıp ayarlayabileceği arayüzdür.

sınıf pyspark.sql.DataFrame

Adlandırılmış sütunlar halinde gruplandırılmış dağıtılmış bir veri koleksiyonudur. DataFrame, Spark SQL'deki ilişkisel tabloya benzer, SQLContext'teki çeşitli işlevler kullanılarak oluşturulabilir.

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

Veri çerçevesi oluşturulduktan sonra, DataFrame'in önceden tanımlanmış işlevleri olan çeşitli alana özgü dilleri (DSL) kullanarak onu işleyebiliriz. Aşağıdaki örneği düşünün.

 # 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'}) 

Aşağıdaki örneği ele alalım:

Spark SQL Kullanarak Sorgulama

Aşağıdaki kodda öncelikle bir DataFrame oluşturup veriyi almak için SQL sorgularını çalıştırıyoruz. Aşağıdaki kodu göz önünde bulundurun:

hızlı sıralamalı bir şey
 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() 

Çıktı:

 +----------------+ | 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() işlevini kullanma

groupBy() işlevi benzer kategori verilerini toplar.

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

Çıktı:

 +----------------+-----+ | 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| +----------------+-----+ 

dağıtım(sayı bölümleri, *sütunlar)

dağıtım() bölümleme ifadesi olan yeni bir DataFrame döndürür. Bu fonksiyon iki parametreyi kabul eder sayı bölümleri Ve *kol. sayı bölümleri parametresi hedef sütun sayısını belirtir.

 song_spotify.repartition(10).rdd.getNumPartitions() data = song_spotify.union(song_spotify).repartition('Energy') data.show(5) 

Çıktı:

 +---+--------------------+-----------+-------+----------------+------+------------+--------------+--------+--------+-------+--------------+------------+----------+ |_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