Ana içeriğe atla

Apache Spark'ı Django ve MongoDB ile Nasıl Entegre Edebilirsiniz

E-ticaret analitiği için Django, MongoDB Atlas ve Apache Spark’ı bağlayan eksiksiz bir veri hattı oluşturun.
Güncel 3 Eki 2026  · 11 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

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

Django Projenizi Kurun

Sanal bir ortam oluşturarak başlayın:

python -m venv venv
source venv/bin/activate

Sanal ortamınızda Python 3.10 veya üzeri kurulu olduğundan emin olun. Ardından, Django MongoDB Backend'i kurun:

pip install django-mongodb-backend

Yukarıdaki komut ayrıca en yeni PyMongo 4.x ve Django 5.2.x sürümlerini de yükler.

Django MongoDB Backend'i indirdikten sonra yeni bir Django projesi oluşturun:

django-admin startproject pyspark_tutorial

Ş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 runserver

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:

DEFAULT_AUTO_FIELD = 'django_mongodb_backend.fields.ObjectIdAutoField'

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


class MongoAdminConfig(AdminConfig):
    default_auto_field = 'django_mongodb_backend.fields.ObjectIdAutoField'

class MongoAuthConfig(AuthConfig):
    default_auto_field = 'django_mongodb_backend.fields.ObjectIdAutoField'

class MongoContentTypesConfig(ContentTypesConfig):
    default_auto_field = 'django_mongodb_backend.fields.ObjectIdAutoField'

Şimdi, pyspark_tutorial/settings.py içinde INSTALLED_APPS ayarını güncelleyin:

INSTALLED_APPS = [
    'pyspark_tutorial.apps.MongoAdminConfig',
    'pyspark_tutorial.apps.MongoAuthConfig',
    'pyspark_tutorial.apps.MongoContentTypesConfig',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

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:

MIGRATION_MODULES = {
    'admin': 'mongo_migrations.admin',
    'auth': 'mongo_migrations.auth',
    'contenttypes': 'mongo_migrations.contenttypes',
}

Proje klasörünüzde, manage.py dosyanızla aynı seviyede bir mongo_migrations klasörü oluşturun. Bu aşamadaki klasör yapınız şu şekilde olmalı:

pyspark_tutorial/
├── pyspark_tutorial/
├── mongo_migrations/
└── manage.py

Ctrl + C ile sunucuyu durdurun, ardından geçişleri oluşturun:

python manage.py makemigrations admin auth contenttypes

mongo_migrations klasö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:

django-admin startproject pyspark_tutorial --template https://github.com/mongodb-labs/django-mongodb-project/archive/refs/heads/5.2.x.zip

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.

python manage.py startapp sales

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


class SalesConfig(AppConfig):
    # Use ObjectId as the default primary key field type for MongoDB:
    default_auto_field = 'django_mongodb_backend.fields.ObjectIdAutoField'
    name = 'sales'

Alternatif olarak, yukarıdaki değişikliği içeren şu startapp şablonunu kullanabilirsiniz:

python manage.py startapp sales --template https://github.com/mongodb-labs/django-mongodb-app/archive/refs/heads/5.2.x.zip

Şimdi, pyspark_tutorial/settings.py içinde sales uygulamanızı INSTALLED_APPS listesine ekleyin:

INSTALLED_APPS = [
    # Add your sales app:
    'sales.apps.SalesConfig',
    ...
]

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 Free küme oluşturmak için Create'e tıklayın:

Ücretsiz bir küme için Create düğmesinin vurgulandığı görsel

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

Kümenizi dağıtmak için yapılandırma seçeneklerinin vurgulandığı görsel

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.

Drivers seçeneğinin vurgulandığı görsel

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.

Python sürücüsü, kurulum komutu, bağlantı dizesi ve Done düğmesinin vurgulandığı görsel

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',
    },
}

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:
class Transaction(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)

    class Meta:
        # 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):
        return f'{self.order_id} - {self.product}'

    @property
    def total_amount(self):
        # Calculate and return the total transaction amount:
        return self.price * self.quantity

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:
def transaction_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 data
    return render(request, 'sales/transaction_list.html', {
        'transactions': transactions,
        'total_revenue': total_revenue,
    })

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'),
]

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')),
]

Ş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.

sales uygulama yapınız şu şekilde olmalıdır:

sales/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── views.py
├── tests.py
├── urls.py
└── templates/
   └── sales/
       └── transaction_list.html

transaction_list.html dosyanıza aşağıdakileri ekleyin:

<!DOCTYPE html>
<html>
<head>
    <title>Transactions</title>
</head>
<body>
    <h1>E-commerce Transactions</h1>
    <h3>Total Revenue: ${{ total_revenue }}</h3>

    <table>
        <thead>
            <tr>
                <th>Order ID</th>
                <th>User ID</th>
                <th>Product</th>
                <th>Price</th>
                <th>Quantity</th>
                <th>Country</th>
                <th>Timestamp</th>
            </tr>
        </thead>
        <tbody>
            {% for t in transactions %}
            <tr>
                <td>{{ t.order_id }}</td>
                <td>{{ t.user_id }}</td>
                <td>{{ t.product }}</td>
                <td>${{ t.price }}</td>
                <td>{{ t.quantity }}</td>
                <td>{{ t.country }}</td>
                <td>{{ t.timestamp }}</td>
            </tr>
            {% empty %}
            <tr><td colspan="7">No transactions available.</td></tr>
            {% endfor %}
        </tbody>
    </table>
</body>
</html>

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:

sales/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── views.py
├── tests.py
├── urls.py
├── templates/
│   └── sales/
│       └── transaction_list.html
└── static/
   └── sales/
       └── styles.css

pyspark_tutorial/settings.py içinde STATIC_URL'ün tanımlı olduğundan emin olun:

STATIC_URL = 'static/'

sales/static/sales/styles.css dosyanıza şunları ekleyin:

table {
  width: 100%;
  border-collapse: collapse;
  margin-top: 20px;
}

th, td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

th {
  background-color: #f5f5f5;
}

body {
  font-family: Arial, sans-serif;
  margin: 20px;
}

h1 {
  color: #333;
}

a {
  text-decoration: none;
  color: #007bff;
}
a:hover {
  text-decoration: underline;
}

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 %}
<!DOCTYPE html>
<html>
<head>
    <title>Transactions</title>
    <!-- Link the CSS file for styling the template:-->
    <link rel="stylesheet" href="{% static 'sales/styles.css' %}">
</head>

Geçişleri çalıştırın

Django'nun MongoDB'de gerekli koleksiyonları oluşturabilmesi için geçişlerinizi oluşturup uygulayın:

python manage.py makemigrations
python manage.py migrate

Verileri MongoDB'ye Yazın

Şimdi, Django etkileşimli kabuğunu kullanarak pyspark_tutorial veritabanınıza uygulamanızın modelleriyle işlem kayıtları ekleyelim:

python manage.py shell

Ardından, satış uygulamanızdan Transaction modelini ve Django yardımcılarından timezone modülünü içe aktarın:

from sales.models import Transaction
from django.utils import timezone

Şimdi bulk_create() kullanarak işlem kayıtları ekleyin:

Transaction.objects.bulk_create([
    Transaction(order_id='T1001', user_id='U001', product='Laptop', price=1000.00, quantity=1, timestamp=timezone.now(), country='US'),
    Transaction(order_id='T1002', user_id='U002', product='Smartphone', price=800.00, quantity=2, timestamp=timezone.now(), country='NG'),
    Transaction(order_id='T1003', user_id='U003', product='Headphones', price=150.00, quantity=1, timestamp=timezone.now(), country='UK'),
    Transaction(order_id='T1004', user_id='U004', product='Laptop', price=1200.00, quantity=1, timestamp=timezone.now(), country='US'),
    Transaction(order_id='T1005', user_id='U005', product='Keyboard', price=45.00, quantity=3, timestamp=timezone.now(), country='DE'),
    Transaction(order_id='T1006', user_id='U006', product='Monitor', price=300.00, quantity=2, timestamp=timezone.now(), country='FR'),
    Transaction(order_id='T1007', user_id='U007', product='Smartwatch', price=199.00, quantity=1, timestamp=timezone.now(), country='IN'),
    Transaction(order_id='T1008', user_id='U008', product='Speaker', price=150.00, quantity=2, timestamp=timezone.now(), country='CA'),
    Transaction(order_id='T1009', user_id='U009', product='Camera', price=800.00, quantity=1, timestamp=timezone.now(), country='NG'),
    Transaction(order_id='T1010', user_id='U010', product='Tablet', price=350.00, quantity=1, timestamp=timezone.now(), country='UK'),
    Transaction(order_id='T1011', user_id='U011', product='Headphones', price=75.00, quantity=2, timestamp=timezone.now(), country='US'),
    Transaction(order_id='T1012', user_id='U012', product='Laptop', price=1300.00, quantity=1, timestamp=timezone.now(), country='NG'),
    Transaction(order_id='T1013', user_id='U013', product='Mouse', price=30.00, quantity=3, timestamp=timezone.now(), country='IN'),
    Transaction(order_id='T1014', user_id='U014', product='Smartphone', price=950.00, quantity=1, timestamp=timezone.now(), country='KE'),
    Transaction(order_id='T1015', user_id='U015', product='Keyboard', price=55.00, quantity=2, timestamp=timezone.now(), country='CA'),
    Transaction(order_id='T1016', user_id='U016', product='Smartwatch', price=250.00, quantity=1, timestamp=timezone.now(), country='DE'),
    Transaction(order_id='T1017', user_id='U017', product='Speaker', price=180.00, quantity=1, timestamp=timezone.now(), country='FR'),
    Transaction(order_id='T1018', user_id='U018', product='Monitor', price=400.00, quantity=2, timestamp=timezone.now(), country='NG'),
    Transaction(order_id='T1019', user_id='U019', product='Laptop', price=1250.00, quantity=1, timestamp=timezone.now(), country='IN'),
    Transaction(order_id='T1020', user_id='U020', product='Camera', price=780.00, quantity=1, timestamp=timezone.now(), country='US'),
])

Kayıtların başarıyla eklendiğini doğrulayın:

Transaction.objects.count()

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:

python manage.py runserver

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 PySpark sürümünü kurun:

pip install pyspark==3.5.0

Başarılı kurulumunu doğrulayın:

pyspark --version

Spark'a hoş geldiniz mesajı görmelisiniz.

PySpark betik dosyasını oluşturun

Sonraki adımda, proje klasörünüzde, manage.py ile aynı seviyede bir transactions.py dosyası oluşturun. Klasör yapınız artık şöyle görünmelidir:

pyspark_tutorial/
├── mongo_migrations/
├── pyspark_tutorial/
├── sales/
├── manage.py
└── transactions.py

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.py dosyanızda kullanın. Doğru biçim şu şekildedir:

mongodb+srv://<mongodb username>:<mongodb password>@<cluster address>/<database name>.<app name>_<model name>?retryWrites=true&w=majority&appName=Cluster0

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ğin cluster0.2rvn82q.mongodb.net.
  • <database name> settings.py içinde veritabanınıza verdiğiniz addır.
  • <app name>_<model name> Django uygulamanız ve modelinizden üretilen koleksiyonun adıdır — örneğin sales_transaction.

Bu bölümde PySpark kodunuzda kullanacağınız bağlantı dizesi şu şekilde görünecek:

mongodb+srv://db_user:password@cluster.mongodb.net/pyspark_tutorial.sales_transaction?retryWrites=true&w=majority&appName=Cluster0

PySpark kodunu ekleyin

Aşağıdaki kodu transactions.py dosyanıza ekleyin:

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

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

python transactions.py komutunu 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.py dosyanızdaki kodu şu şekilde değiştirin:

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, sum as _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()

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, sum as _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()

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:

class RevenuePerCountry(models.Model):
    country = models.CharField(max_length=50)
    total_revenue = models.DecimalField(max_digits=15, decimal_places=2)

    class Meta:
        # 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:
        return f'{self.country}: ${self.total_revenue}'

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

def transaction_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:
def revenue_per_country_view(request):
    revenue_per_country = RevenuePerCountry.objects.all()
    return render(request, 'sales/revenue_per_country.html', {'revenue_per_country': revenue_per_country})

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'),
]

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 %}
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Transactions</title>
    <link rel="stylesheet" href="{% static 'sales/styles.css' %}">
</head>
<body>
    <h1>Total Revenue by Country</h1>
    <a href="{% 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>

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:

<a href="{% url 'revenue_per_country' %}">View Total Revenue by Country</a>

Django sunucusunu çalıştırın:

python manage.py runserver

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.


Damilola Oladele's photo
Author
Damilola Oladele
Konular
MongoDB

En İyi DataCamp Kursları

Kurs

PySpark Temelleri

4 sa
157.8K
PySpark paketini kullanarak Spark'ta dağıtılmış veri yönetimi ve makine öğrenimini uygulamayı öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

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.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

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!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör