1. परिचय
इस कोडलैब में, आपको BigQuery Studio के जाने-पहचाने इंटरफ़ेस में, डेटा ट्रांसफ़ॉर्मेशन के लिए Apache Spark का इस्तेमाल करने का तरीका बताया जाएगा. आपको एक ही नोटबुक से, BigQuery से डेटा पढ़ना होगा. साथ ही, PySpark का इस्तेमाल करके डेटा को साफ़ करना होगा और उसमें बदलाव करना होगा. इसके बाद, नतीजों को नई BigQuery टेबल में वापस लिखना होगा.
कोडलैब की मदद से, आपको यहां दिया गया तरीका अपनाना होगा:
- अपना Google Cloud प्रोजेक्ट तैयार करें और उस पर सभी ज़रूरी एपीआई चालू करें
- अस्थायी फ़ोल्डर के लिए GCS बकेट बनाएं
- Apache Spark चलाने के लिए ज़रूरी लाइब्रेरी इंपोर्ट करें
- BigQuery कनेक्टर के साथ Spark सेशन शुरू करना
- BigQuery के सार्वजनिक डेटासेट से, Google Analytics का डेटा सैंपल पढ़ना
- डिवाइस ब्राउज़र के हिसाब से एग्रीगेट किए गए डेटा (बुनियादी मेट्रिक) की मदद से डेटा में बदलाव करना
- राजस्व की कैलकुलेशन के साथ ट्रैफ़िक सोर्स के विश्लेषण की मदद से डेटा में बदलाव करना
- भौगोलिक विश्लेषण की मदद से डेटा को ट्रांसफ़ॉर्म करना
- डेटा को बदलकर BigQuery टेबल में लिखना
आर्किटेक्चर की खास जानकारी
ज़रूरी शर्तें
- बिलिंग की सुविधा वाला Google Cloud Platform (GCP) प्रोजेक्ट.
- आपके GCP प्रोजेक्ट में BigQuery API और BigQuery Connection API चालू होना चाहिए.
- एसक्यूएल और Python की बुनियादी जानकारी.
आपको क्या सीखने को मिलेगा
- BigQuery Studio Notebook में Apache Spark का इस्तेमाल करके डेटा निकालने का तरीका
- BigQuery Studio Notebook में Apache Spark का इस्तेमाल करके, डेटा को ट्रांसफ़ॉर्म या एग्रीगेट करने का तरीका
- BigQuery Studio Notebook में Apache Spark का इस्तेमाल करके, डेटा को ट्रांसफ़ॉर्म या एग्रीगेट करने के बाद उसे लिखने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- Chrome वेब ब्राउज़र
- Gmail खाता
- ऐसा Cloud प्रोजेक्ट जिसमें बिलिंग की सुविधा चालू हो
2. बुनियादी सेटअप और ज़रूरी शर्तें
अपनी स्पीड से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर
PROJECT_ID
के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू, प्रोजेक्ट नंबर भी होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम के लिए ज़रूरी शर्तें पूरी करते हैं.
3. शुरू करने से पहले
एपीआई चालू करना
BigQuery Studio Notebooks का इस्तेमाल करने से पहले, हमें इन एपीआई को चालू करना होगा:
- Compute Engine API
- Dataform API
- Vertex AI API
मैन्युअल तरीके से चालू करने के लिए, BigQuery पर जाएं. एडिटर पैन के टैब बार में, + चिह्न के बगल में मौजूद ऐरो ड्रॉप-डाउन पर क्लिक करें. इसके बाद, नोटबुक पर पॉइंटर को घुमाएं. इसके बाद, BigQuery टेंप्लेट या खाली नोटबुक या Spark टेंप्लेट चुनें
'कोर सुविधा वाले एपीआई चालू करें' विंडो में, BigQuery Unified API में जाकर 'चालू करें' पर क्लिक करें
इसके बाद, इसे चालू करें और बंद करें पर क्लिक करें. ज़्यादा जानकारी के लिए, कृपया ऐसेट मैनेजमेंट के लिए BigQuery Studio चालू करना लेख पढ़ें
4. किसी सार्वजनिक डेटासेट को पढ़ना
सबसे पहले, हम कुछ समय के लिए GCS बकेट बनाएंगे, ताकि BigQuery Studio Notebooks में Spark को चलाया जा सके.
- Google Cloud Console में, BigQuery पर जाएं
- एडिटर पैन के टैब बार में, + चिह्न के बगल में मौजूद ऐरो ड्रॉप-डाउन पर क्लिक करें. इसके बाद, पॉइंटर को नोटबुक पर ले जाएं और खाली नोटबुक चुनें.
- कोड सेल पर क्लिक करें. इसके बाद, GCS बकेट बनाने के लिए यहां दी गई CLI स्क्रिप्ट टाइप करें. इसके बाद, सेल चलाएं बटन पर क्लिक करें या Shift + Enter दबाएं
!gsutil mb -p <your_project_id> -c STANDARD -l US gs://ioxid2025-<your_project_id>
Google Cloud प्रोजेक्ट बनाते समय चुनी गई वैल्यू के हिसाब से, <your_project_id> की वैल्यू अपडेट करें. GCS के यूनीक बकेट का नाम बनाने के लिए, <your_project_id> की वैल्यू को अपने प्रोजेक्ट आईडी से अपडेट करें. इसके बाद, कोड सेल को चलाने के लिए, 'सेल चलाएं' बटन पर क्लिक करें या Shift + Enter दबाएं
इसके बाद, हम स्पार्क सेशन शुरू करेंगे. इस कोडलैब में, हम SparkSession
लाइब्रेरी का इस्तेमाल करेंगे. हालांकि, BigQuery Studio Notebook में Spark चलाने के लिए, dataproc की सुविधाओं का फ़ायदा उठाने के लिए DataprocSession
का इस्तेमाल किया जा सकता है
- कोड सेल पर क्लिक करें. इसके बाद, स्पार्क सेशन शुरू करने के लिए नीचे दी गई सीएलआई स्क्रिप्ट टाइप करें. 'सेल चलाएं' बटन पर क्लिक करें या Shift + Enter दबाएं.
# Import required libraries
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, countDistinct, when, expr, date_format
from pyspark.sql.types import DecimalType
# Initialize Spark session with BigQuery connector
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, countDistinct, when, expr, date_format
from pyspark.sql.types import DecimalType
# Initialize Spark session with BigQuery connector
spark = SparkSession.builder \
.appName("Google Analytics ETL with Apache Spark") \
.config("spark.jars.packages", "com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.32.0") \
.getOrCreate()
spark
अनुमानित आउटपुट :
SparkSession - in-memory SparkContext Spark UI Version v3.5.4 Master local[*] AppName Google Analytics ETL with Apache Spark
- GCP प्रोजेक्ट और GCS का कुछ समय के लिए बकेट सेट करने के लिए, कोड सेल पर क्लिक करें. इसके बाद, नीचे दी गई सीएलआई स्क्रिप्ट टाइप करें.
# Set GCP project and temporary bucket
project_id = "your-gcp-project-id" # Replace with your GCP project ID
bucket = "your-gcs-bucket" # Replace with your GCS bucket for temporary files spark.conf.set("temporaryGcsBucket", bucket)
Google Analytics का सैंपल डेटाबेस
Google Analytics का सैंपल डेटाबेस, BigQuery पर उपलब्ध कराया जाता है. इसे Google Cloud के सार्वजनिक डेटासेट प्रोग्राम के ज़रिए उपलब्ध कराया जाता है. इस डेटासेट में, 12 महीनों (अगस्त 2016 से अगस्त 2017) का अस्पष्ट Google Analytics 360 डेटा होता है. यह डेटा, Google मर्चंडाइज़ के स्टोर से मिलता है. यह स्टोर, Google के ब्रैंड वाले प्रॉडक्ट बेचने वाला एक वास्तविक ई-कॉमर्स स्टोर है. यह डेटा, BigQuery में मौजूद होता है. यह कारोबार के डेटा का विश्लेषण करने और Analytics 360 के डेटा का विश्लेषण करने के लिए BigQuery का इस्तेमाल करने के फ़ायदों के बारे में जानने का शानदार तरीका है डेटा के बारे में ज़्यादा जानें
डेटा में, ई-कॉमर्स वेबसाइट पर दिखने वाला डेटा शामिल होता है. इसमें यह जानकारी शामिल होती है:
- ट्रैफ़िक सोर्स डेटा: उस प्लैटफ़ॉर्म के बारे में जानकारी जहां से वेबसाइट पर लोग आते हैं. इसमें ऑर्गैनिक ट्रैफ़िक, पेड सर्च ट्रैफ़िक, और डिसप्ले ट्रैफ़िक का डेटा शामिल है
- कॉन्टेंट डेटा: साइट पर उपयोगकर्ताओं के व्यवहार के बारे में जानकारी. जैसे, विज़िटर के देखे गए पेज के यूआरएल, उनके कॉन्टेंट वगैरह से इंटरैक्ट करने के तरीके.
- लेन-देन का डेटा: Google मर्चंडाइज़ स्टोर की वेबसाइट पर हुए लेन-देन के बारे में जानकारी.
Apache Spark में, टॉप 5 डेटा का सैंपल दिखाने के लिए नीचे दिया गया कोड चलाएं
# EXTRACT: Read data from BigQuery
print("Extracting data from BigQuery...")
ga_df = spark.read.format("bigquery") \
.option("table", "bigquery-public-data.google_analytics_sample.ga_sessions_20170801") \
.load()
# Show schema sample data
print("Sample data:")
ga_df.show(5, truncate=False)
अनुमानित आउटपुट :
Extracting data from BigQuery... Sample data: +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ |visitorId|visitNumber|visitId |visitStartTime|date |totals |trafficSource |device |geoNetwork |customDimensions |hits |fullVisitorId |userId|clientId|channelGrouping|socialEngagementType| +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ |NULL |1 |1501591568|1501591568 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{NULL, (not set), (direct), (none), NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL} |{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Europe, Southern Europe, Greece, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, tellas.gr, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[] |[{1, 0, 5, 46, NULL, true, true, true, https://www.google.gr/, {/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /bags/, /google+zipper+front+sports+bag.axd, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Bags, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |3418334011779872055|NULL |NULL |Organic Search |Not Socially Engaged| |NULL |2 |1501589647|1501589647 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1}|{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Asia, Southern Asia, India, Maharashtra, (not set), Mumbai, not available in demo dataset, unknown.unknown, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, APAC}] |[{1, 0, 5, 14, NULL, true, true, true, https://analytics.google.com/analytics/web/, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |2474397855041322408|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501616621|1501616621 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Europe, Northern Europe, United Kingdom, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, as9105.com, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, EMEA}] |[{1, 0, 12, 43, NULL, true, true, true, https://analytics.google.com/analytics/web/?utm_source=demoaccount&utm_medium=demoaccount&utm_campaign=demoaccount, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}]|5870462820713110108|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501601200|1501601200 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Firefox, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop}|{Americas, Northern America, United States, Texas, Dallas-Ft. Worth TX, Dallas, not available in demo dataset, h5colo.com, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, North America}]|[{1, 0, 8, 26, NULL, true, true, true, https://analytics.google.com/analytics/web/, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |9397809171349480379|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501615525|1501615525 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), adwords.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL} |{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Americas, Northern America, United States, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, (not set), not available in demo dataset, not available in demo dataset, not available in demo dataset}|[{4, North America}]|[{1, 0, 12, 25, NULL, true, true, true, https://adwords.google.com/analytics/web/?__o=cues&authuser=0, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |6089902943184578335|NULL |NULL |Referral |Not Socially Engaged| +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ only showing top 5 rows
5. डिवाइस ब्राउज़र के हिसाब से डेटा को एग्रीगेट करना (बुनियादी मेट्रिक)
यह कोड, डिवाइस ब्राउज़र के हिसाब से Google Analytics का डेटा इकट्ठा करता है. साथ ही, कुल सेशन, विज़िट, हिट, पेज व्यू, बाउंस, साइट पर बिताया गया समय, यूनीक विज़िटर, और हर विज़िट पर बिताए गए औसत समय जैसी अलग-अलग मेट्रिक का हिसाब लगाता है. इसके बाद, यह किसी कॉलम का नाम बदलता है और नतीजों को क्रम में लगाता है.
print("Transformation 1: Aggregating by device browser...")
device_agg = ga_df.groupBy("device.browser") \
.agg(
count("*").alias("total_sessions"),
sum("totals.visits").alias("total_visits"),
sum("totals.hits").alias("total_hits"),
sum("totals.pageviews").alias("total_pageviews"),
sum("totals.bounces").alias("total_bounces"),
sum("totals.timeOnSite").alias("total_time_on_site"),
countDistinct("fullVisitorId").alias("unique_visitors"),
(sum("totals.timeOnSite")/sum("totals.visits")).alias("avg_time_per_visit")
) \
.withColumnRenamed("browser", "device_browser") \
.orderBy("total_sessions", ascending=False)
# Show sample transformed data
print("\nDevice Aggregation Sample:")
device_agg.show(5)
अनुमानित आउटपुट :
Transformation 1: Aggregating by device browser... Device Aggregation Sample: +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ | device_browser|total_sessions|total_visits|total_hits|total_pageviews|total_bounces|total_time_on_site|unique_visitors|avg_time_per_visit| +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ | Chrome| 1900| 1900| 10896| 8956| 870| 354691| 1689|186.67947368421054| | Safari| 397| 397| 1260| 1137| 218| 43150| 364|108.69017632241814| | Firefox| 101| 101| 390| 343| 59| 10659| 95|105.53465346534654| |Internet Explorer| 54| 54| 107| 102| 36| 5589| 50| 103.5| | Edge| 23| 23| 63| 55| 12| 2623| 23|114.04347826086956| +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ only showing top 5 rows
6. रेवेन्यू के हिसाब-किताब के साथ ट्रैफ़िक सोर्स का विश्लेषण करना
यह कोड, Google Analytics के डेटा का विश्लेषण करता है. यह विश्लेषण, ट्रैफ़िक सोर्स और मीडियम के हिसाब से किया जाता है. साथ ही, यह सेशन की संख्या, ट्रांज़ैक्शन, कुल रेवेन्यू, हर सेशन से मिलने वाला रेवेन्यू, और यूनीक विज़िटर जैसी मेट्रिक का हिसाब लगाता है. इसके बाद, यह कॉलम के नाम बदलता है और कुल रेवेन्यू के हिसाब से नतीजों को क्रम से लगाता है.
print("Transformation 2: Analyzing traffic sources...")
traffic_source_agg = ga_df.groupBy("trafficSource.source", "trafficSource.medium") \
.agg(
count("*").alias("session_count"),
sum(when(col("totals.transactions").isNotNull(), 1).otherwise(0)).alias("transactions"),
sum("totals.totalTransactionRevenue").cast(DecimalType(20,2)).alias("total_revenue"),
(sum("totals.totalTransactionRevenue")/count("*")).cast(DecimalType(10,2)).alias("revenue_per_session"),
countDistinct("fullVisitorId").alias("unique_visitors")
) \
.withColumnRenamed("source", "traffic_source") \
.withColumnRenamed("medium", "traffic_medium") \
.orderBy("total_revenue", ascending=False)
print("\nTraffic Source Aggregation Sample:")
traffic_source_agg.show(5)
अनुमानित आउटपुट :
Transformation 2: Analyzing traffic sources... Traffic Source Aggregation Sample: +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ | traffic_source|traffic_medium|session_count|transactions|total_revenue|revenue_per_session|unique_visitors| +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ | (direct)| (none)| 2166| 42|8872040000.00| 4096048.01| 1943| | mail.google.com| referral| 2| 1| 17960000.00| 8980000.00| 2| | google.com.tw| referral| 1| 0| NULL| NULL| 1| |analytics.google.com| referral| 57| 0| NULL| NULL| 53| | quora.com| referral| 6| 0| NULL| NULL| 5| +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ only showing top 5 rows
7. जगह के हिसाब से विश्लेषण
यह कोड, Google Analytics के डेटा का विश्लेषण करता है. यह विश्लेषण, देश और इलाके के हिसाब से किया जाता है. इसमें सेशन की संख्या, कुल पेज व्यू, साइट पर बिताया गया कुल समय, हर सेशन के हिसाब से औसत समय, और यूनीक विज़िटर का हिसाब लगाया जाता है. इसके बाद, कॉलम के नाम बदले जाते हैं और सेशन की संख्या के हिसाब से क्रम से लगाया जाता है.
print("Transformation 3: Geographic analysis...")
geo_agg = ga_df.groupBy("geoNetwork.country", "geoNetwork.region") \
.agg(
count("*").alias("session_count"),
sum("totals.pageviews").alias("total_pageviews"),
sum("totals.timeOnSite").alias("total_time_on_site"),
(sum("totals.timeOnSite")/count("*")).alias("avg_time_per_session"),
countDistinct("fullVisitorId").alias("unique_visitors")
) \
.withColumnRenamed("country", "country") \
.withColumnRenamed("region", "region") \
.orderBy("session_count", ascending=False)
print("\nGeographic Aggregation Sample:")
geo_agg.show(5)
अनुमानित आउटपुट :
Transformation 3: Geographic analysis... Geographic Aggregation Sample: +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ | country| region|session_count|total_pageviews|total_time_on_site|avg_time_per_session|unique_visitors| +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ | United States|not available in ...| 564| 2326| 97829| 173.45567375886526| 494| | United States| California| 420| 3102| 116563| 277.5309523809524| 347| | United States| New York| 109| 845| 39976| 366.7522935779817| 84| |United Kingdom|not available in ...| 82| 161| 7791| 95.01219512195122| 79| | India|not available in ...| 62| 139| 2869| 46.274193548387096| 61| +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ only showing top 5 rows
8. समय के आधार पर विश्लेषण
यह कोड, समय के हिसाब से विश्लेषण करता है. इसके लिए, यह visitStartTime
कॉलम से घंटे की जानकारी निकालता है. इसके बाद, यह डेटा को घंटे के हिसाब से ग्रुप करता है, ताकि हर घंटे के लिए सेशन की संख्या, ट्रांज़ैक्शन, कुल रेवेन्यू, और कुल पेज व्यू का हिसाब लगाया जा सके. आखिर में, यह नतीजों को घंटे के हिसाब से क्रम में लगाता है.
print("Transformation 4: Time-based analysis...")
hourly_agg = ga_df.withColumn("hour", date_format(col("visitStartTime").cast("timestamp"), "H")) \
.groupBy("hour") \
.agg(
count("*").alias("session_count"),
sum("totals.transactions").alias("transactions"),
sum("totals.totalTransactionRevenue").cast(DecimalType(20,2)).alias("total_revenue"),
sum("totals.pageviews").alias("total_pageviews")
) \
.orderBy("hour")
print("\nHourly Aggregation Sample:")
hourly_agg.show(5)
अनुमानित आउटपुट :
Transformation 4: Time-based analysis... Hourly Aggregation Sample: +----+-------------+------------+-------------+---------------+ |hour|session_count|transactions|total_revenue|total_pageviews| +----+-------------+------------+-------------+---------------+ | 0| 87| NULL| NULL| 372| | 1| 102| NULL| NULL| 494| | 10| 67| NULL| NULL| 149| | 11| 73| NULL| NULL| 167| | 12| 99| NULL| NULL| 313| +----+-------------+------------+-------------+---------------+ only showing top 5 rows
9. नतीजे को BigQuery टेबल में लिखना
यह कोड, एग्रीगेट किए गए चार डेटाफ़्रेम (device_agg
, traffic_source_agg
, geo_agg
, और hourly_agg
) को Google BigQuery में अलग-अलग टेबल में एक्सपोर्ट करता है. अगर मौजूदा टेबल मौजूद हैं, तो उन्हें सीधे लिखने के तरीके का इस्तेमाल करके बदल देता है.
# Write to BigQuery tables
print("\nLoading data to BigQuery...")
# Set output tables
device_output_table = f"{project_id}.analytics_sample.device_aggregation"
traffic_output_table = f"{project_id}.analytics_sample.traffic_source_aggregation"
geo_output_table = f"{project_id}.analytics_sample.geo_aggregation"
hourly_output_table = f"{project_id}.analytics_sample.hourly_aggregation"
dataset_id = "demo" # Replace with your BigQuery dataset ID
# Set BigQuery output table
device_output_table = f"{project_id}.{dataset_id}.device_aggregation"
traffic_output_table = f"{project_id}.{dataset_id}.traffic_source_aggregation"
geo_output_table = f"{project_id}.{dataset_id}.geo_aggregation"
hourly_output_table = f"{project_id}.{dataset_id}.hourly_aggregation"
# Write each DataFrame to BigQuery
device_agg.write \
.format("bigquery") \
.option("table", device_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
traffic_source_agg.write \
.format("bigquery") \
.option("table", traffic_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
geo_agg.write \
.format("bigquery") \
.option("table", geo_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
hourly_agg.write \
.format("bigquery") \
.option("table", hourly_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
BigQuery में आउटपुट टेबल देखें. इससे यह पक्का किया जा सकेगा कि डेटा में कुछ बदलाव करने के बाद, वह सेव हो गया है
device_aggregation टेबल
geo_aggregation टेबल
hourly_aggregation टेबल
traffic_source_aggregation
10. BigQuery Studio नोटबुक कोड को व्यवस्थित करना (ज़रूरी नहीं)
BigQuery Studio नोटबुक के कोड को इन तरीकों से व्यवस्थित किया जा सकता है:
- Google Cloud Console से नोटबुक कोड शेड्यूल करें ( नोटबुक की कीमत लागू होती है).
- नोटबुक कोड को Dataproc Serverless बैच वर्कलोड के तौर पर चलाएं. इस पर Dataproc Serverless की कीमत लागू होती है.
इस कोडलैब में, हम Google Cloud Console से शेड्यूल किए गए नोटबुक कोड का इस्तेमाल करेंगे.
- नोटबुक टूलबार में, शेड्यूल करें पर क्लिक करें.
- शेड्यूल नोटबुक पैनल में, शेड्यूल का नाम फ़ील्ड में, शेड्यूल का नाम डालें.
- Authentication सेक्शन में जाकर, अपने Google खाते के उपयोगकर्ता क्रेडेंशियल या सेवा खाते से नोटबुक को अनुमति दें.
- अपने Google खाते के उपयोगकर्ता क्रेडेंशियल ( झलक देखें) का इस्तेमाल करने के लिए, मेरे उपयोगकर्ता क्रेडेंशियल के साथ लागू करें को चुनें.
- किसी सेवा खाते का इस्तेमाल करने के लिए, चुने गए सेवा खाते से लागू करें को चुनें. इसके बाद, कोई सेवा खाता चुनें.
- नोटबुक के विकल्प सेक्शन में, रनटाइम टेंप्लेट फ़ील्ड में जाकर, Colab नोटबुक का रनटाइम टेंप्लेट या डिफ़ॉल्ट रनटाइम स्पेसिफ़िकेशन चुनें. Colab नोटबुक का रनटाइम टेंप्लेट बनाने के बारे में जानकारी के लिए, रनटाइम टेंप्लेट बनाना लेख पढ़ें.
- Cloud Storage बकेट फ़ील्ड में, ब्राउज़ करें पर क्लिक करें. इसके बाद, Cloud Storage बकेट चुनें या बनाएं. चुने गए सेवा खाते को, चुने गए बकेट पर स्टोरेज एडमिन (
roles/storage.admin
) की IAM भूमिका असाइन की जानी चाहिए. ज़्यादा जानकारी के लिए, नोटबुक शेड्यूल करने की सुविधा चालू करना लेख पढ़ें. - शेड्यूल की फ़्रीक्वेंसी सेक्शन में, यह तरीका अपनाएं:
- दोहराता है मेन्यू में जाकर, शेड्यूल किए गए नोटबुक रन की फ़्रीक्वेंसी चुनें.
- इस समय पर फ़ील्ड में, नोटबुक को शेड्यूल किए गए समय पर चलाने के लिए समय डालें.
- टाइमज़ोन मेन्यू में जाकर, शेड्यूल के लिए टाइमज़ोन चुनें.
- शेड्यूल बनाएं पर क्लिक करें. अगर आपने पुष्टि करने के तरीके के लिए, मेरे उपयोगकर्ता क्रेडेंशियल के साथ लागू करें चुना है, तो आपको अपने Google खाते को अनुमति देनी होगी ( पूर्वावलोकन करें).
11. क्लीन अप
इस कोडलैब में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.
12. बधाई हो
आपने BigQuery Studio Notebooks में Apache Spark Serverless का इस्तेमाल करके, डेटा ट्रांसफ़ॉर्मेशन और विश्लेषण पूरा कर लिया है. इस दौरान, आपने Google Cloud के सार्वजनिक डेटासेट के बारे में जाना. साथ ही, BigQuery Studio Notebook में Apache Spark की मदद से सर्वरलेस ईटीएल किया और BigQuery Studio Notebook को व्यवस्थित किया. बहुत बढ़िया!
अगले चरण :
- ऑटोमेशन के लिए, सेवा खाते का इस्तेमाल करके नोटबुक को व्यवस्थित करें.
- ईटीएल जॉब चलाने पर, मॉनिटरिंग की अवधि के लिए स्क्रिप्ट जोड़ें.
- नोटबुक डिप्लॉय करें.
- BigQuery Studio Notebooks में Serverless Dataproc के साथ, Apache Spark की डिस्ट्रिब्यूटेड क्षमताओं का फ़ायदा पाने के लिए, DataprocSparkSession का इस्तेमाल करें.
- BigQuery Studio में, Apache Spark के लिए सेव किया गया तरीका बनाएं. इस तरीके से, ओओपी के सिद्धांतों को लागू किया जा सकता है. इससे PySpark कोड को बेहतर तरीके से व्यवस्थित किया जा सकता है, उसे दोबारा इस्तेमाल किया जा सकता है, और उसे बनाए रखा जा सकता है.
रेफ़रंस :