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