Günde binlerce işlemi işleyen bir e-ticaret platformunu yönettiğinizi hayal edin. Satış trendlerini analiz etmek, gelir artışını izlemek ve gelecekteki geliri tahmin etmek istiyorsunuz. Geleneksel veritabanı sorguları bu ölçeği veya hızı kaldıramaz. Bu nedenle, büyük veri kümelerini daha hızlı işleyip gerçek zamanlı içgörüler elde etmenin bir yoluna ihtiyacınız var.
Apache Spark large veri hacimlerini verimli bir şekilde analiz etmenizi sağlar. Bu eğitimde, Django, MongoDB ve Apache Spark'ı bağlayarak e-ticaret işlem verilerini nasıl analiz edeceğinizi
MongoDB'yi veritabanı olarak kullanan bir Django projesi kuracak ve işlem verilerini burada depolayacaksınız. Ardından, PySpark'ı, yani Apache Spark için Python API'sini kullanarak verileri okuyup filtreleyeceksiniz. Ayrıca temel hesaplamalar yapacak ve işlenmiş verileri MongoDB'ye kaydedeceksiniz. Son olarak, işlenmiş verileri Django uygulamanızda görüntüleyeceksiniz.
Bu eğitimden en iyi şekilde yararlanmak için Python ve Django web çatısı hakkında temel düzeyde bilgi sahibi olmalısınız.
Şimdi başlayalım.
Özet
django-mongodb-backend ile Django'yu MongoDB Atlas'a, ObjectId birincil anahtarlar için yerel destekle bağlayın
Django'nun yerleşik uygulamalarını (admin, auth, contenttypes) MongoDB uyumlu alanlar kullanacak şekilde özel uygulama yapılandırmalarıyla düzenleyin
MongoDB'den veri okumak, filtrelemek ve toplamak için MongoDB Spark Connector 10.4.1 ile PySpark 3.5.0'ı kurun
MongoDB koleksiyonlarını PySpark DataFrame'lerine yüklemek için spark.read.format('mongodb').load() kullanın
İşlenmiş verileri .write.format('mongodb').save() ile MongoDB'ye geri yazın ve sonuçları Django şablonlarında görüntüleyin
Şimdi proje klasörüne gidin ve geliştirme sunucusunu çalıştırarak kurulumun doğru olduğunu doğrulayın:
cd pyspark_tutorial
python manage.py runserverAltyapı:
Django projenizin başarıyla çalıştığını doğrulamak için http://127.0.0.1:8000/ adresini ziyaret edin.
Django'yu MongoDB Kullanacak Şekilde Yapılandırın
Varsayılan olarak Django, birincil anahtarlar için AutoField tamsayı kimlikleri kullanır; bu SQL veritabanlarıyla iyi çalışır. Ancak MongoDB belge kimlikleri için ObjectId kullanır. Modellerinizi uyumlu hale getirmek için Django'nun birincil anahtarları tamsayı yerine ObjectId olarak oluşturması gerekir.
pyspark_tutorial/settings.py dosyasını açın ve DEFAULT_AUTO_FIELD ayarını güncelleyin:
Bu genel ayara rağmen, admin, auth ve contenttypes gibi Django'nun yerleşik uygulamaları varsayılan olarak yine AutoField kullanır. Tüm uygulamalarda tutarlılığı sağlamak için bu uygulamaların ObjectId kullanmasını sağlayacak özel uygulama yapılandırmaları oluşturun.
pyspark_tutorial/apps.py dosyası oluşturun ve şunları ekleyin:
from django.contrib.admin.apps import AdminConfig
from django.contrib.auth.apps import AuthConfig
from django.contrib.contenttypes.apps import ContentTypesConfig
classMongoAdminConfig(AdminConfig):
default_auto_field ='django_mongodb_backend.fields.ObjectIdAutoField'classMongoAuthConfig(AuthConfig):
default_auto_field ='django_mongodb_backend.fields.ObjectIdAutoField'classMongoContentTypesConfig(ContentTypesConfig):
default_auto_field ='django_mongodb_backend.fields.ObjectIdAutoField'Altyapı:
Şimdi, pyspark_tutorial/settings.py içinde INSTALLED_APPS ayarını güncelleyin:
Tüm modellerin ObjectIdAutoField kullanması gerektiğinden, kullandığınız her üçüncü taraf ve contrib uygulamasının MongoDB'ye özel kendi geçişlerine sahip olması gerekir. Bu nedenle pyspark_tutorial/setting.py dosyanıza şunları ekleyin:
Yeni uygulamanızı ObjectId kullanacak şekilde yapılandırmak için sales/apps.py dosyasını açın ve default_auto_field = 'django.db.models.BigAutoField' satırını şu şekilde değiştirin:
from django.apps import AppConfig
classSalesConfig(AppConfig):# Use ObjectId as the default primary key field type for MongoDB:
default_auto_field ='django_mongodb_backend.fields.ObjectIdAutoField'
name ='sales'Altyapı:
Alternatif olarak, yukarıdaki değişikliği içeren şu startapp şablonunu kullanabilirsiniz:
Şimdi açılan sayfada aşağıdaki seçenekleri belirleyin:
Ücretsiz küme seçeneği
Küme adı: Cluster0
Sağlayıcı: AWS
Bölge: us-east-1
Create Deployment'a tıklayın:
Kullanıcı adınızı ve parolanızı göreceksiniz. Şunları yapın:
1. Kullanıcı adınızı ve parolanızı güvenli bir belgeye kopyalayın.
2.Create Database User'a tıklayın.
3.Choose a connection method'a tıklayarak bir bağlantı IP adresi ayarlayın.
Açılan sayfada şunları yapın:
1.Drivers'ı seçin.
2. Sürücü olarak Python'ı seçin.
3.Install your driver seçeneğindeki komutu kopyalayın ve terminalinizde çalıştırın.
4. Parolanız dahil connection string'inizi, Add your connection string into your application code bölümünün altından kopyalayın ve güvenli bir belgede saklayın.
5.Done'a tıklayın.
Django'yu MongoDB'ye Bağlayın
pyspark_tutorial/settings.py dosyasını açın ve kaydettiğiniz connection string ile Django MongoDB Backend'i kullanmak için DATABASES ayarını güncelleyin. Bir veritabanı adı da belirleyin:
DATABASES ={'default':{# Change to use Django MongoDB Backend:'ENGINE':'django_mongodb_backend',# Use your saved connection string:'HOST':'<connection string>',# Set a database name:'NAME':'pyspark_tutorial',},}Altyapı:
Yukarıdaki kodda, <connection string> ifadesini kaydettiğiniz bağlantı dizesi ile değiştirdiğinizden emin olun.
Bu yapılandırma, Django'yu MongoDB Atlas kümenize bağlar. ENGINE MongoDB arka ucunu işaret eder, HOST bağlantı dizenizi saklar ve NAME Django'nun kullanacağı veritabanı adını tanımlar.
Django Uygulamasını Oluşturun
Uygulamanız yapılandırıldığına göre, tarayıcıda işlem verilerini görüntülemek için gerekli modelleri, görünümleri, URL'leri ve şablonları oluşturacaksınız.
Modeli tanımlayın
Modeller, verilerinizin yapısını açıklar. İşlem kayıtlarını temsil eden bir model oluşturun. sales/models.py dosyasını açın ve kodu aşağıdakiyle değiştirin:
from django.db import models
# Define a model to represent each transaction record:classTransaction(models.Model):
order_id = models.CharField(max_length=50, unique=True)
user_id = models.CharField(max_length=50)
product = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.PositiveIntegerField()
timestamp = models.DateTimeField()
country = models.CharField(max_length=50)classMeta:# Sort transactions by order ID:
ordering =['order_id']# Add indexes to improve query performance for common lookup fields
indexes =[
models.Index(fields=['timestamp']),
models.Index(fields=['country']),
models.Index(fields=['product']),]def__str__(self):returnf'{self.order_id} - {self.product}'@propertydeftotal_amount(self):# Calculate and return the total transaction amount:return self.price * self.quantityAltyapı:
Bu model, her işlemi ürün ayrıntıları, fiyat, adet ve ülke alanlarıyla tanımlar. İşlemleri order_id'ye göre sıralar. Sorgu performansını artırmak için kilit alanlarda indeksler ve toplam işlem tutarını hesaplayan bir özellik içerir.
Görünümü tanımlayın
Görünümler, bu kayıtların tarayıcıda nasıl görüneceğini kontrol eder. İşlem kayıtlarını görüntülemek için bir görünüm oluşturun. sales/views.py dosyasını açın ve kodu aşağıdakiyle değiştirin:
from django.shortcuts import render
from.models import Transaction
# Define a view to display all transactions and total revenue:deftransaction_list_view(request):# Retrieve all transaction records from the database:
transactions = Transaction.objects.all()# Calculate the total revenue from all transactions:
total_revenue =sum(t.total_amount for t in transactions)# Render the transaction list template with context datareturn render(request,'sales/transaction_list.html',{'transactions': transactions,'total_revenue': total_revenue,})Altyapı:
Yukarıdaki görünüm, Transaction modeli ile MongoDB'den tüm işlem kayıtlarını getirir. Tüm işlemler için total_amount alanını toplayarak toplam geliri hesaplar. Ardından, iki değeri daha sonra oluşturacağımız transaction_list.htmlşablonuna gönderir:
* transactions: bir tabloda görüntülenecek tüm işlem kayıtlarının listesi
* total_revenue: tüm işlemlerden elde edilen toplam tutar
Şablon bu değerleri her bir işlemi ve toplam geliri göstermek için kullanacaktır.
URL'leri yapılandırın
Kullanıcılar bir URL'yi ziyaret ettiğinde Django'nun hangi görünümü yükleyeceğini bilmesi için yönlendirmeler oluşturmanız gerekir. Bir sales/urls.py dosyası oluşturun ve şunları ekleyin:
from django.urls import path
from.import views
# Define URL patterns for the sales app:
urlpatterns =[# Route the root URL to the transaction list view:
path('', views.transaction_list_view, name='transaction_list'),]Altyapı:
Uygulamanızın URL'lerini proje URL yapılandırmanıza dahil edin. pyspark_tutorial/urls.py dosyasını açın ve aşağıdaki gibi güncelleyin:
from django.contrib import admin
from django.urls import path, include
urlpatterns =[
path('admin/', admin.site.urls),# Include your app’s URLs:
path("", include('sales.urls')),]Altyapı:
Şablon oluşturun
Şablonlar, verilerinizin tarayıcıda nasıl görüneceğini tanımlar. Bir sales/templates/sales klasörü oluşturun ve içine transaction_list.html adlı bir dosya ekleyin.
Yukarıdaki şablon, görünümden aktarılan verileri dinamik olarak görüntülemek için Django'nun şablon dilini kullanır.
En üstte toplam gelir {{ total_revenue }} kullanılarak gösterilir. Ardından şablon, {% for t in transactions %} etiketiyle transactions içindeki tüm işlem kayıtları arasında döner ve her kaydı tabloda bir satır olarak gösterir. Her sütun bir işlemin order_id, product, price, quantity ve country gibi belirli bir özelliğini gösterir. Kayıt yoksa, {% empty %} etiketi, boş bir tablo yerine “No transactions available” mesajının görünmesini sağlar.
Stil ekleyin
İşlem sayfanızı görsel olarak daha çekici ve okunması daha kolay hale getirmek için özel CSS stilleri ekleyeceksiniz. Django, CSS, JavaScript ve görseller gibi statik dosyaları static adlı özel bir dizin aracılığıyla sunar. Bu, tasarım dosyalarını kodunuzdan ayrı tutar.
Şimdi bir sales/static/sales klasörü oluşturun ve içine styles.css adlı bir dosya ekleyin. sales klasör yapınız şu şekilde görünmelidir:
Son olarak, Django'ya statik dosyaları yüklemesini söyleyin ve CSS dosyasını HTML şablonunuza dahil edin.
sales/templates/sales/transaction_list.html dosyanızın en üstüne {% load static %} ekleyin ve ardından <head> öğesini styles.css dosyasına bağlantı verecek şekilde güncelleyin:
<!-- Load static files:-->
{% load static %}
<!DOCTYPEhtml><html><head><title>Transactions</title><!-- Link the CSS file for styling the template:--><linkrel="stylesheet"href="{% static 'sales/styles.css' %}"></head>Altyapı:
Geçişleri çalıştırın
Django'nun MongoDB'de gerekli koleksiyonları oluşturabilmesi için geçişlerinizi oluşturup uygulayın:
http://127.0.0.1:8000/ adresini ziyaret ederek verilerinizin görüntülendiğini doğrulayın.
Verileri PySpark ile İşleyin
Kayıtlar artık MongoDB veritabanınızda depolandığına göre, verilerinizi işlemek için Apache Spark kullanacaksınız. Apache Spark, büyük veri kümelerini işlemek için Django projenizde kullanabileceğiniz bir Python API'si, PySpark ile birlikte gelir. PySpark'a yeniyseniz, PySpark kurulum rehberimize göz atın.
PySpark kullanarak MongoDB'ye bağlanan ve işlem kayıtlarınızı okuyan bir Python betiği oluşturacaksınız. Bu veriler üzerinde filtreleme gibi temel işlemler gerçekleştireceksiniz. Ardından ülkeye göre gruplandıracak ve her biri için toplam geliri hesaplayacaksınız. Son olarak, işlenmiş verileri veritabanınızda yeni bir MongoDB koleksiyonuna yazacaksınız.
PySpark'ı MongoDB'ye bağlamak için, veritabanı adınızı ve koleksiyon adınızı içeren bir bağlantı dizisi oluşturmanız gerekir. MongoDB'de bir koleksiyon, ilişkisel veritabanlarındaki bir tabloya benzer ve ilgili belgeleri depolar. Koleksiyon adınız, uygulama adınız ve model adınızın alt çizgi (_) ile ayrılmasından oluşur.
Oluşturduğunuz bağlantı dizisini transactions.py dosyanızda kullanın. Doğru biçim şu şekildedir:
from pyspark.sql import SparkSession
# Initialize SparkSession with MongoDB connector:
spark = SparkSession.builder \
.appName('ReadTransactions') \
.config('spark.mongodb.read.connection.uri',# Replace with your built MongoDB connection string:'<built connection string>') \
.config(# Add the MongoDB Spark connector package:'spark.jars.packages','org.mongodb.spark:mongo-spark-connector_2.12:10.4.1') \
.getOrCreate()# Read data from MongoDB into a Spark DataFrame:
df = spark.read.format('mongodb').load()# Show result:
df.show()# Stop the Spark session:
spark.stop()Altyapı:
from pyspark.sql import SparkSession PySpark'ı kullanmanın giriş noktasıdır. Spark ile etkileşim kurmanızı ve veri işlemleri gerçekleştirmenizi sağlar.
spark = SparkSession.builder yeni bir Spark oturumu başlatır ve ona ReadTransactions adını verir. İki .config() seçeneği, Spark'ın MongoDB'ye nasıl bağlanacağını tanımlar:
spark.mongodb.read.connection.uri: veritabanınızın konumunu Spark'a bildiren MongoDB bağlantı dizesi
spark.jars.packages: Spark'ın MongoDB ile iletişim kurabilmesi için MongoDB Spark bağlayıcı paketini indirir
df = spark.read.format('mongodb').load() bağlantı dizenizde tanımlanan koleksiyondaki tüm belgeleri bir PySpark DataFrame'ine yükler; böylece verilerinizi sorgulamak ve dönüştürmek kolaylaşır.
.show() MongoDB verilerinizi doğrudan terminalde tablo biçiminde önizleme olarak yazdırır.
spark.stop() işi tamamlandığında Spark uygulamasını sonlandırır ve sistem kaynaklarını serbest bırakır.
Son olarak, <built connection string> ifadesini oluşturduğunuz MongoDB bağlantı dizesi ile değiştirin. Ayrıca, bağlanmadan önce geçerli IP adresinizin MongoDB Atlas ağ erişim listesinde beyaz listede olduğundan emin olun.
Şimdi python transactions.py komutunu çalıştırın; veritabanınızda saklanan işlem kayıtlarını terminalinizde göreceksiniz.
PySpark SQL ile verileri filtreleyin
Kayıtlarınızı filtrelemek için PySpark SQL işlevlerini de kullanabilirsiniz — örneğin yalnızca Nijerya'dan (NG) gelen işlemleri göstermek için. transactions.py dosyanızdaki kodu değiştirin:
from pyspark.sql import SparkSession
# Import col to reference DataFrame column names:from pyspark.sql.functions import col
spark = SparkSession.builder \
.appName('ReadTransactions') \
.config('spark.mongodb.read.connection.uri',# Replace with your built MongoDB connection string:'<built connection string>') \
.config('spark.jars.packages','org.mongodb.spark:mongo-spark-connector_2.12:10.4.0') \
.getOrCreate()
df = spark.read.format('mongodb').load()# Filter transactions from Nigeria:
ng_df = df.filter(col('country')=='NG')# Show filtered results:
ng_df.show()# Stop the Spark session:
spark.stop()Altyapı:
python transactions.py komutunu tekrar çalıştırın; NG ülkesine ait işlemleri göreceksiniz.
from pyspark.sql import SparkSession
# Import col to reference DataFrame columns and import sum as _sum to avoid naming conflicts:from pyspark.sql.functions import col,sumas _sum
spark = SparkSession.builder \
.appName('ReadTransactions') \
.config('spark.mongodb.read.connection.uri',# Replace with your built MongoDB connection string:'<Built Connection String>') \
.config('spark.jars.packages','org.mongodb.spark:mongo-spark-connector_2.12:10.4.0') \
.getOrCreate()
df = spark.read.format('mongodb').load()# Calculate total revenue per country:
revenue_per_country = df.groupBy('country').agg(
_sum(col('price')* col('quantity')).alias('total_revenue'))# Show total revenue per country:
revenue_per_country.show()# Stop the Spark session:
spark.stop()Altyapı:
python transactions.py komutunu çalıştırın. Ülke başına toplam geliri gösteren bir tablo göreceksiniz.
İşlenmiş verileri MongoDB'ye geri yazın
Artık PySpark ile verilerinizi nasıl okuyup işleyeceğinizi anladığınıza göre, işlenmiş verileri bir MongoDB koleksiyonuna nasıl yazacağınızı göstereceğim.
Burada, ülke başına toplam geliri içeren DataFrame'i yeni bir koleksiyona yazacaksınız.
transactions.py dosyanızdaki kodu değiştirin:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col,sumas _sum
spark = SparkSession.builder \
.appName('ReadTransactions') \
.config('spark.mongodb.read.connection.uri',# Replace with your built MongoDB connection string:'<Built Connection String>') \
.config('spark.jars.packages','org.mongodb.spark:mongo-spark-connector_2.12:10.4.0') \
.getOrCreate()
df = spark.read.format('mongodb').load()# Calculate total revenue per country
revenue_per_country = df.groupBy('country').agg(
_sum(col('price')* col('quantity')).alias('total_revenue'))# Write aggregated records into a new MongoDB collection:
revenue_per_country.write \
.format('mongodb') \
.mode('overwrite') \
.option('spark.mongodb.write.connection.uri',# Replace with your built MongoDB connection string:'<Built Connection String>') \
.option(# Specify the target database name:'spark.mongodb.write.database','pyspark_tutorial') \
.option(# Specify the target collection name:'spark.mongodb.write.collection','revenue_per_country') \
.save()# Stop the Spark session:
spark.stop()Altyapı:
Yukarıdaki kodda Spark, revenue_per_country adlı toplulaştırılmış DataFrame'i, MongoDB'deki pyspark_tutorial veritabanınızda revenue_per_country adlı yeni bir koleksiyona yazar.
Son olarak, her iki bağlantı yapılandırmasında da '<built connection string>' ifadesini oluşturduğunuz MongoDB bağlantı dizesi ile değiştirdiğinizden emin olun. Ardından python transactions.py komutunu çalıştırın.
İşlenmiş Verileri Django'da Görüntüleyin
Şimdi, ülke bazında toplam gelirinizi bir Django sayfasında görüntüleyelim.
Önce, ülke başına gelir için yeni bir model oluşturalım. sales/models.py dosyanızın en altına bunu ekleyin:
classRevenuePerCountry(models.Model):
country = models.CharField(max_length=50)
total_revenue = models.DecimalField(max_digits=15, decimal_places=2)classMeta:# Define the collection (table) name in MongoDB:
db_table ='revenue_per_country'# Order results by total_revenue when querying:
ordering =['total_revenue']def__str__(self):# Return a readable string representation of the record:returnf'{self.country}: ${self.total_revenue}'Altyapı:
Ardından, sales/views.py dosyanızı revenue_per_country koleksiyonunu getirip görüntüleyecek şekilde değiştirin:
from django.shortcuts import render
from.models import Transaction
# Import the RevenuePerCountry model:from.models import RevenuePerCountry
deftransaction_list_view(request):
transactions = Transaction.objects.all()
total_revenue =sum(t.total_amount for t in transactions)return render(request,'sales/transaction_list.html',{'transactions': transactions,'total_revenue': total_revenue,})# Add a new view to fetch and display your revenue per country:defrevenue_per_country_view(request):
revenue_per_country = RevenuePerCountry.objects.all()return render(request,'sales/revenue_per_country.html',{'revenue_per_country': revenue_per_country})Altyapı:
sales/urls.py içinde yeni görünüme bir rota ekleyin:
from django.urls import path
from.import views
urlpatterns =[
path('', views.transaction_list_view, name='transaction_list'),# Add new URL route:
path('revenue_per_country/', views.revenue_per_country_view, name='revenue_per_country'),]Altyapı:
Sonraki adımda, ülkeye göre toplam geliri görüntülemek için yeni bir şablon oluşturun.
sales/templates/sales klasöründe bir revenue_per_country.html dosyası oluşturun ve şunları ekleyin:
{% load static %}
<!DOCTYPEhtml><htmllang="en"><head><title>Transactions</title><linkrel="stylesheet"href="{% static 'sales/styles.css' %}"></head><body><h1>Total Revenue by Country</h1><ahref="{% url 'transaction_list' %}">← Back to Transactions</a><table><tr><th>Country</th><th>Total Revenue (USD)</th></tr>
{% for r in revenue_per_country %}
<tr><td>{{ r.country }}</td><td>${{ r.total_revenue|floatformat:2 }}</td></tr>
{% endfor %}
</table></body></html>Altyapı:
sales/templates/sales/transaction_list.html şablonunu da ülke başına gelir sayfasına bir bağlantı içerecek şekilde değiştirmeniz gerekir. <h3> etiketinden sonra ancak <table> etiketinden önce aşağıdaki kodu ekleyin:
<ahref="{% url 'revenue_per_country' %}">View Total Revenue by Country</a>Altyapı:
http://127.0.0.1:8000/revenue_per_country/ adresini ziyaret ederek yeni sayfanın doğru görüntülendiğini doğrulayın.
Tebrikler! Apache Spark'ı kullanarak verilerinizi başarıyla işlediniz, MongoDB'de depoladınız ve işlenmiş verileri Django kullanarak bir web sayfasında görüntülediniz.
SSS
Django'nun yerleşik ORM'i ile veri işlemek yerine neden Apache Spark kullanmalıyım?⌄
Django’nun ORM’i temel sorgularda iyi çalışır ancak büyük ölçekli veri işlemede zorlanır. Apache Spark, dağıtık hesaplama sayesinde devasa veri kümelerini verimli bir şekilde işler. Büyük hacimli verilerde hızlı toplulaştırma ve analiz gerektiğinde Apache Spark kullanın.
Apache Spark'ı ayrıca kurmam gerekir mi, yoksa PySpark yeterli mi?⌄
Yalnızca pip install pyspark==3.5.0 ile PySpark’ı kurmanız yeterli. Yerelde Spark çalıştırmak için ihtiyacınız olan her şeyi içerir.
Eğitimdeki PySpark betiğini birden fazla kez çalıştırırsam ne olur? MongoDB'de verilerim çoğalır mı?⌄
Eğitimdeki betik .mode('overwrite') kullanır; bu da her çalıştırmada tüm koleksiyonu değiştirir. Bu, yinelenen kayıtları önler ancak mevcut verileri siler. Yeni kayıtlar eklemek için .mode('append') olarak değiştirin. Üretimde, yinelemeyi önlemek için benzersiz tanımlayıcılara göre kayıtları güncelleyen bir mantık kullanın.
Neden Django'nun varsayılan `AutoField` alanı yerine `ObjectIdAutoField` kullanmalıyım?⌄
MongoDB, SQL veritabanları gibi tamsayı değil, varsayılan belge kimliği olarak ObjectId kullanır. ObjectIdAutoField kullanmak, Django’nun kimlikleri MongoDB’nin beklediği biçimde oluşturmasını sağlar. Aksi halde Django tamsayı anahtarlar üretmeye çalışır ve uyumluluk hatalarına yol açar.
Aynı Django projesinde MongoDB ile birlikte diğer veritabanlarını da kullanabilir miyim?⌄
Evet, Django tek bir projede birden fazla veritabanını destekler. <project>/settings.py dosyanızdaki DATABASES ayarında birden fazla giriş tanımlayarak bazı uygulamalarda MongoDB, diğerlerinde PostgreSQL veya MySQL kullanabilirsiniz.
MongoDB Spark Connector nedir?⌄
MongoDB Spark Connector, Apache Spark’ın MongoDB veritabanlarından okuma ve bu veritabanlarına yazma yapmasını sağlayan resmi bir kütüphanedir. Spark DataFrame’leriyle yerel entegrasyon sağlar ve filtreleme, toplulaştırma ve akış gibi işlemleri destekler. Bağlayıcı 10.x sürümü Spark 3.1-3.5 ve MongoDB 6.0 veya sonraki sürümlerle uyumludur.
MongoDB ile Apache Spark 4.x kullanabilir miyim?⌄
Evet, ancak Spark 4.0 desteği ekleyen 11.0 veya daha yeni MongoDB Spark Connector sürümüne ihtiyacınız olacak. Spark 4.x’in Java 17 ve Scala 2.13 gerektirdiğini unutmayın. Spark 3.x kullanıyorsanız (bu eğitimde olduğu gibi), 10.4.1 veya 10.6.0 sürümünü kullanın.
PySpark'ta MongoDB bağlantı hatalarını nasıl giderebilirim?⌄
Yaygın sorunlar şunlardır: 1) IP adresinin MongoDB Atlas Network Access’te beyaz listeye alınmaması, 2) Hatalı bağlantı dizesi biçimi (veritabanı ve koleksiyon adını dahil ettiğinizden emin olun), 3) Eksik veya uyumsuz Spark bağlayıcı sürümü. Atlas Network Access ayarlarınızı kontrol edin ve bağlantı dizenizin şu biçimi izlediğini doğrulayın: mongodb+srv://user:password@cluster/database.collection.
PyMongo ile Django MongoDB Backend arasındaki fark nedir?⌄
PyMongo, MongoDB için resmi Python sürücüsüdür ve doğrudan veritabanı erişimi sağlar. Django MongoDB Backend ise PyMongo’yu dahili olarak kullanan, ancak Django’nun ORM’iyle bütünleşerek MongoDB ile tanıdık Django modelleri, geçişler ve yönetim özelliklerini kullanmanıza olanak veren bir Django veritabanı arka ucudur.
Veri işleme için PyMongo yerine neden PySpark kullanmalıyım?⌄
PySpark, dağıtık hesaplama için tasarlanmıştır ve bir kümedeki birden fazla düğümde devasa veri kümelerini işleyebilir. PyMongo standart CRUD işlemlerinde iyi çalışsa da, PySpark karmaşık toplulaştırmalar, makine öğrenimi ve büyük veri üzerinde analitik için üstündür. Veri işleme ihtiyaçlarınız tek bir makinenin verimli şekilde üstesinden gelebileceğinin ötesine geçtiğinde PySpark kullanın.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Günde binlerce işlemi işleyen bir e-ticaret platformunu yönettiğinizi hayal edin. Satış trendlerini analiz etmek, gelir artışını izlemek ve gelecekteki geliri tahmin etmek istiyorsunuz. Geleneksel veritabanı sorguları bu ölçeği veya hızı kaldıramaz. Bu nedenle, büyük veri kümelerini daha hızlı işleyip gerçek zamanlı içgörüler elde etmenin bir yoluna ihtiyacınız var.
Apache Spark large veri hacimlerini verimli bir şekilde analiz etmenizi sağlar. Bu eğitimde, Django, MongoDB ve Apache Spark'ı bağlayarak e-ticaret işlem verilerini nasıl analiz edeceğinizi
MongoDB'yi veritabanı olarak kullanan bir Django projesi kuracak ve işlem verilerini burada depolayacaksınız. Ardından, PySpark'ı, yani Apache Spark için Python API'sini kullanarak verileri okuyup filtreleyeceksiniz. Ayrıca temel hesaplamalar yapacak ve işlenmiş verileri MongoDB'ye kaydedeceksiniz. Son olarak, işlenmiş verileri Django uygulamanızda görüntüleyeceksiniz.
Bu eğitimden en iyi şekilde yararlanmak için Python ve Django web çatısı hakkında temel düzeyde bilgi sahibi olmalısınız.
Şimdi başlayalım.
Özet
django-mongodb-backendile Django'yu MongoDB Atlas'a,ObjectIdbirincil anahtarlar için yerel destekle bağlayınadmin,auth,contenttypes) MongoDB uyumlu alanlar kullanacak şekilde özel uygulama yapılandırmalarıyla düzenleyinspark.read.format('mongodb').load()kullanın.write.format('mongodb').save()ile MongoDB'ye geri yazın ve sonuçları Django şablonlarında görüntüleyinDjango Projenizi Kurun
Sanal bir ortam oluşturarak başlayın:
Sanal ortamınızda Python 3.10 veya üzeri kurulu olduğundan emin olun. Ardından, Django MongoDB Backend'i kurun:
Yukarıdaki komut ayrıca en yeni
PyMongo 4.xveDjango 5.2.xsürümlerini de yükler.Django MongoDB Backend'i indirdikten sonra yeni bir Django projesi oluşturun:
Şimdi proje klasörüne gidin ve geliştirme sunucusunu çalıştırarak kurulumun doğru olduğunu doğrulayın:
Django projenizin başarıyla çalıştığını doğrulamak için
http://127.0.0.1:8000/adresini ziyaret edin.Django'yu MongoDB Kullanacak Şekilde Yapılandırın
Varsayılan olarak Django, birincil anahtarlar için
AutoFieldtamsayı kimlikleri kullanır; bu SQL veritabanlarıyla iyi çalışır. Ancak MongoDB belge kimlikleri içinObjectIdkullanır. Modellerinizi uyumlu hale getirmek için Django'nun birincil anahtarları tamsayı yerineObjectIdolarak oluşturması gerekir.pyspark_tutorial/settings.pydosyasını açın veDEFAULT_AUTO_FIELDayarını güncelleyin:Bu genel ayara rağmen,
admin,authvecontenttypesgibi Django'nun yerleşik uygulamaları varsayılan olarak yineAutoFieldkullanır. Tüm uygulamalarda tutarlılığı sağlamak için bu uygulamalarınObjectIdkullanmasını sağlayacak özel uygulama yapılandırmaları oluşturun.pyspark_tutorial/apps.pydosyası oluşturun ve şunları ekleyin:Şimdi,
pyspark_tutorial/settings.pyiçindeINSTALLED_APPSayarını güncelleyin:Tüm modellerin
ObjectIdAutoFieldkullanması gerektiğinden, kullandığınız her üçüncü taraf vecontribuygulamasının MongoDB'ye özel kendi geçişlerine sahip olması gerekir. Bu nedenlepyspark_tutorial/setting.pydosyanıza şunları ekleyin:Proje klasörünüzde,
manage.pydosyanızla aynı seviyede birmongo_migrationsklasörü oluşturun. Bu aşamadaki klasör yapınız şu şekilde olmalı:Ctrl + C ile sunucuyu durdurun, ardından geçişleri oluşturun:
mongo_migrationsklasörünü kontrol ederseniz, her yerleşik uygulama için bir klasör göreceksiniz. Her klasör kendi geçişlerini içerir.Tüm bu MongoDB yapılandırmalarını içeren bir Django proje şablonu için şunu çalıştırın:
Not: 5.2.x dışında bir Django sürümü kullanıyorsanız, sürümünüzün ilk iki rakamıyla eşleşecek şekilde bu iki numarayı değiştirin.
Uygulamanızı Oluşturun ve Yapılandırın
Bir sonraki adım, ham ve işlenmiş işlem kayıtlarınızı depolamak için bir Django uygulaması oluşturmaktır.
Yeni uygulamanızı
ObjectIdkullanacak şekilde yapılandırmak içinsales/apps.pydosyasını açın vedefault_auto_field = 'django.db.models.BigAutoField'satırını şu şekilde değiştirin:Alternatif olarak, yukarıdaki değişikliği içeren şu
startappşablonunu kullanabilirsiniz:Şimdi,
pyspark_tutorial/settings.pyiçindesalesuygulamanızıINSTALLED_APPSlistesine ekleyin:Bir MongoDB Dağıtımı Oluşturun
Verilerinizi MongoDB'de depolayacağınız için, verilerinizi bulutta depolayıp yönetmek üzere MongoDB Atlas'ta ücretsiz katmanlı bir dağıtım oluşturma adımlarını anlatacağım.
Atlas hesabı için kaydolun; Google hesabınızı veya bir e-posta adresini kullanabilirsiniz.
Bir
Freeküme oluşturmak için Create'e tıklayın:Şimdi açılan sayfada aşağıdaki seçenekleri belirleyin:
Create Deployment'a tıklayın:
Kullanıcı adınızı ve parolanızı göreceksiniz. Şunları yapın:
1. Kullanıcı adınızı ve parolanızı güvenli bir belgeye kopyalayın.
2. Create Database User'a tıklayın.
3. Choose a connection method'a tıklayarak bir bağlantı IP adresi ayarlayın.
Açılan sayfada şunları yapın:
1. Drivers'ı seçin.
2. Sürücü olarak Python'ı seçin.
3. Install your driver seçeneğindeki komutu kopyalayın ve terminalinizde çalıştırın.
4. Parolanız dahil
connection string'inizi, Add your connection string into your application code bölümünün altından kopyalayın ve güvenli bir belgede saklayın.5. Done'a tıklayın.
Django'yu MongoDB'ye Bağlayın
pyspark_tutorial/settings.pydosyasını açın ve kaydettiğinizconnection stringile Django MongoDB Backend'i kullanmak içinDATABASESayarını güncelleyin. Bir veritabanı adı da belirleyin:Yukarıdaki kodda,
<connection string>ifadesini kaydettiğiniz bağlantı dizesi ile değiştirdiğinizden emin olun.Bu yapılandırma, Django'yu MongoDB Atlas kümenize bağlar.
ENGINEMongoDB arka ucunu işaret eder,HOSTbağlantı dizenizi saklar veNAMEDjango'nun kullanacağı veritabanı adını tanımlar.Django Uygulamasını Oluşturun
Uygulamanız yapılandırıldığına göre, tarayıcıda işlem verilerini görüntülemek için gerekli modelleri, görünümleri, URL'leri ve şablonları oluşturacaksınız.
Modeli tanımlayın
Modeller, verilerinizin yapısını açıklar. İşlem kayıtlarını temsil eden bir model oluşturun.
sales/models.pydosyasını açın ve kodu aşağıdakiyle değiştirin:Bu model, her işlemi ürün ayrıntıları, fiyat, adet ve ülke alanlarıyla tanımlar. İşlemleri
order_id'ye göre sıralar. Sorgu performansını artırmak için kilit alanlarda indeksler ve toplam işlem tutarını hesaplayan bir özellik içerir.Görünümü tanımlayın
Görünümler, bu kayıtların tarayıcıda nasıl görüneceğini kontrol eder. İşlem kayıtlarını görüntülemek için bir görünüm oluşturun.
sales/views.pydosyasını açın ve kodu aşağıdakiyle değiştirin:Yukarıdaki görünüm,
Transactionmodeli ile MongoDB'den tüm işlem kayıtlarını getirir. Tüm işlemler içintotal_amountalanını toplayarak toplam geliri hesaplar. Ardından, iki değeri daha sonra oluşturacağımıztransaction_list.htmlşablonuna gönderir:*
transactions: bir tabloda görüntülenecek tüm işlem kayıtlarının listesi*
total_revenue: tüm işlemlerden elde edilen toplam tutarŞablon bu değerleri her bir işlemi ve toplam geliri göstermek için kullanacaktır.
URL'leri yapılandırın
Kullanıcılar bir URL'yi ziyaret ettiğinde Django'nun hangi görünümü yükleyeceğini bilmesi için yönlendirmeler oluşturmanız gerekir. Bir
sales/urls.pydosyası oluşturun ve şunları ekleyin:Uygulamanızın URL'lerini proje URL yapılandırmanıza dahil edin.
pyspark_tutorial/urls.pydosyasını açın ve aşağıdaki gibi güncelleyin:Şablon oluşturun
Şablonlar, verilerinizin tarayıcıda nasıl görüneceğini tanımlar. Bir
sales/templates/salesklasörü oluşturun ve içinetransaction_list.htmladlı bir dosya ekleyin.salesuygulama yapınız şu şekilde olmalıdır:transaction_list.htmldosyanıza aşağıdakileri ekleyin:Yukarıdaki şablon, görünümden aktarılan verileri dinamik olarak görüntülemek için Django'nun şablon dilini kullanır.
En üstte toplam gelir
{{ total_revenue }}kullanılarak gösterilir. Ardından şablon,{% for t in transactions %}etiketiyle transactions içindeki tüm işlem kayıtları arasında döner ve her kaydı tabloda bir satır olarak gösterir. Her sütun bir işleminorder_id,product,price,quantityvecountrygibi belirli bir özelliğini gösterir. Kayıt yoksa,{% empty %}etiketi, boş bir tablo yerine “No transactions available” mesajının görünmesini sağlar.Stil ekleyin
İşlem sayfanızı görsel olarak daha çekici ve okunması daha kolay hale getirmek için özel CSS stilleri ekleyeceksiniz. Django, CSS, JavaScript ve görseller gibi statik dosyaları
staticadlı özel bir dizin aracılığıyla sunar. Bu, tasarım dosyalarını kodunuzdan ayrı tutar.Şimdi bir
sales/static/salesklasörü oluşturun ve içinestyles.cssadlı bir dosya ekleyin.salesklasör yapınız şu şekilde görünmelidir:pyspark_tutorial/settings.pyiçindeSTATIC_URL'ün tanımlı olduğundan emin olun:sales/static/sales/styles.cssdosyanıza şunları ekleyin:Son olarak, Django'ya statik dosyaları yüklemesini söyleyin ve CSS dosyasını HTML şablonunuza dahil edin.
sales/templates/sales/transaction_list.htmldosyanızın en üstüne{% load static %}ekleyin ve ardından<head>öğesinistyles.cssdosyasına bağlantı verecek şekilde güncelleyin:Geçişleri çalıştırın
Django'nun MongoDB'de gerekli koleksiyonları oluşturabilmesi için geçişlerinizi oluşturup uygulayın:
Verileri MongoDB'ye Yazın
Şimdi, Django etkileşimli kabuğunu kullanarak
pyspark_tutorialveritabanınıza uygulamanızın modelleriyle işlem kayıtları ekleyelim:Ardından, satış uygulamanızdan
Transactionmodelini ve Django yardımcılarındantimezonemodülünü içe aktarın:Şimdi
bulk_create()kullanarak işlem kayıtları ekleyin:Kayıtların başarıyla eklendiğini doğrulayın:
Sayı 20 dönerse, kayıtlar başarıyla kaydedilmiştir.
Şimdi
exit()komutuyla kabuktan çıkın ve işlemlerinizi tarayıcıda görüntülemek için Django sunucunuzu başlatın:http://127.0.0.1:8000/adresini ziyaret ederek verilerinizin görüntülendiğini doğrulayın.Verileri PySpark ile İşleyin
Kayıtlar artık MongoDB veritabanınızda depolandığına göre, verilerinizi işlemek için Apache Spark kullanacaksınız. Apache Spark, büyük veri kümelerini işlemek için Django projenizde kullanabileceğiniz bir Python API'si, PySpark ile birlikte gelir. PySpark'a yeniyseniz, PySpark kurulum rehberimize göz atın.
PySpark kullanarak MongoDB'ye bağlanan ve işlem kayıtlarınızı okuyan bir Python betiği oluşturacaksınız. Bu veriler üzerinde filtreleme gibi temel işlemler gerçekleştireceksiniz. Ardından ülkeye göre gruplandıracak ve her biri için toplam geliri hesaplayacaksınız. Son olarak, işlenmiş verileri veritabanınızda yeni bir MongoDB koleksiyonuna yazacaksınız.
PySpark'ı kurun
Sunucuyu durdurun ve en güncel MongoDB Spark bağlayıcısı ile uyumlu
PySparksürümünü kurun:Başarılı kurulumunu doğrulayın:
Spark'a hoş geldiniz mesajı görmelisiniz.
PySpark betik dosyasını oluşturun
Sonraki adımda, proje klasörünüzde,
manage.pyile aynı seviyede birtransactions.pydosyası oluşturun. Klasör yapınız artık şöyle görünmelidir:Bağlantı dizenizi oluşturun
PySpark'ı MongoDB'ye bağlamak için, veritabanı adınızı ve koleksiyon adınızı içeren bir bağlantı dizisi oluşturmanız gerekir. MongoDB'de bir koleksiyon, ilişkisel veritabanlarındaki bir tabloya benzer ve ilgili belgeleri depolar. Koleksiyon adınız, uygulama adınız ve model adınızın alt çizgi (_) ile ayrılmasından oluşur.
Oluşturduğunuz bağlantı dizisini
transactions.pydosyanızda kullanın. Doğru biçim şu şekildedir:Yer tutucu değerlerin açıklaması şöyledir:
<mongodb username>ve<mongodb password>MongoDB Atlas kullanıcı adınız ve parolanızdır.<cluster address>Atlas bağlantı dizenizde gösterilen alan adıdır — örneğincluster0.2rvn82q.mongodb.net.<database name>settings.pyiçinde veritabanınıza verdiğiniz addır.<app name>_<model name>Django uygulamanız ve modelinizden üretilen koleksiyonun adıdır — örneğinsales_transaction.Bu bölümde PySpark kodunuzda kullanacağınız bağlantı dizesi şu şekilde görünecek:
PySpark kodunu ekleyin
Aşağıdaki kodu
transactions.pydosyanıza ekleyin:from pyspark.sql import SparkSessionPySpark'ı kullanmanın giriş noktasıdır. Spark ile etkileşim kurmanızı ve veri işlemleri gerçekleştirmenizi sağlar.spark = SparkSession.builderyeni bir Spark oturumu başlatır ve onaReadTransactionsadını verir. İki.config()seçeneği, Spark'ın MongoDB'ye nasıl bağlanacağını tanımlar:spark.mongodb.read.connection.uri: veritabanınızın konumunu Spark'a bildiren MongoDB bağlantı dizesispark.jars.packages: Spark'ın MongoDB ile iletişim kurabilmesi için MongoDB Spark bağlayıcı paketini indirirdf = spark.read.format('mongodb').load()bağlantı dizenizde tanımlanan koleksiyondaki tüm belgeleri bir PySpark DataFrame'ine yükler; böylece verilerinizi sorgulamak ve dönüştürmek kolaylaşır..show()MongoDB verilerinizi doğrudan terminalde tablo biçiminde önizleme olarak yazdırır.spark.stop()işi tamamlandığında Spark uygulamasını sonlandırır ve sistem kaynaklarını serbest bırakır.Son olarak,
<built connection string>ifadesini oluşturduğunuz MongoDB bağlantı dizesi ile değiştirin. Ayrıca, bağlanmadan önce geçerli IP adresinizin MongoDB Atlas ağ erişim listesinde beyaz listede olduğundan emin olun.Şimdi
python transactions.pykomutunu çalıştırın; veritabanınızda saklanan işlem kayıtlarını terminalinizde göreceksiniz.PySpark SQL ile verileri filtreleyin
Kayıtlarınızı filtrelemek için PySpark SQL işlevlerini de kullanabilirsiniz — örneğin yalnızca Nijerya'dan (NG) gelen işlemleri göstermek için.
transactions.pydosyanızdaki kodu değiştirin:python transactions.pykomutunu tekrar çalıştırın;NGülkesine ait işlemleri göreceksiniz.Gruplayın ve toplayın
İşlem kayıtlarınızı gruplandırabilir ve ülke başına toplam geliri hesaplayabilirsiniz.
transactions.pydosyanızdaki kodu şu şekilde değiştirin:python transactions.pykomutunu çalıştırın. Ülke başına toplam geliri gösteren bir tablo göreceksiniz.İşlenmiş verileri MongoDB'ye geri yazın
Artık PySpark ile verilerinizi nasıl okuyup işleyeceğinizi anladığınıza göre, işlenmiş verileri bir MongoDB koleksiyonuna nasıl yazacağınızı göstereceğim.
Burada, ülke başına toplam geliri içeren DataFrame'i yeni bir koleksiyona yazacaksınız.
transactions.pydosyanızdaki kodu değiştirin:Yukarıdaki kodda Spark,
revenue_per_countryadlı toplulaştırılmış DataFrame'i, MongoDB'dekipyspark_tutorialveritabanınızdarevenue_per_countryadlı yeni bir koleksiyona yazar.Son olarak, her iki bağlantı yapılandırmasında da
'<built connection string>'ifadesini oluşturduğunuz MongoDB bağlantı dizesi ile değiştirdiğinizden emin olun. Ardındanpython transactions.pykomutunu çalıştırın.İşlenmiş Verileri Django'da Görüntüleyin
Şimdi, ülke bazında toplam gelirinizi bir Django sayfasında görüntüleyelim.
Önce, ülke başına gelir için yeni bir model oluşturalım.
sales/models.pydosyanızın en altına bunu ekleyin:Ardından,
sales/views.pydosyanızırevenue_per_countrykoleksiyonunu getirip görüntüleyecek şekilde değiştirin:sales/urls.pyiçinde yeni görünüme bir rota ekleyin:Sonraki adımda, ülkeye göre toplam geliri görüntülemek için yeni bir şablon oluşturun.
sales/templates/salesklasöründe birrevenue_per_country.htmldosyası oluşturun ve şunları ekleyin:sales/templates/sales/transaction_list.htmlşablonunu da ülke başına gelir sayfasına bir bağlantı içerecek şekilde değiştirmeniz gerekir.<h3>etiketinden sonra ancak<table>etiketinden önce aşağıdaki kodu ekleyin:Django sunucusunu çalıştırın:
http://127.0.0.1:8000/revenue_per_country/adresini ziyaret ederek yeni sayfanın doğru görüntülendiğini doğrulayın.Tebrikler! Apache Spark'ı kullanarak verilerinizi başarıyla işlediniz, MongoDB'de depoladınız ve işlenmiş verileri Django kullanarak bir web sayfasında görüntülediniz.