Skip to main content

pySpark sample code

 #!/usr/bin/env python

# coding: utf-8

# In[133]:


#https://spark.apache.org/docs/latest/api/python/getting_started/install.html to check version

get_ipython().system('pip install pyspark')
get_ipython().system('pip install findspark')
from pyspark.sql.functions import broadcast

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("pipeline").config("spark.hadoop.fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem").getOrCreate()


# In[139]:


# ingest the sales.csv file
df1 = spark.read.csv(r"C:\Users\keert\Downloads\sales.csv", header =True, inferSchema=True) # inferSchema is given to change everything as datatype or else everything will be become string
df1.show()
df1.printSchema()


# In[140]:


# ingest products file
df_products = spark.read.option("multiline", "true").json(r"C:\Users\keert\Downloads\products.json") # giving option as multiline since json file as multiline
df_products.show()
df_products.printSchema() # to see the datatypes and null values


# In[141]:


#to ingest regions file
df_regions = spark.read.csv(r"C:\Users\keert\Downloads\regions.csv", header =True , inferSchema = True)
df_regions.show()
df_regions.printSchema()


# In[142]:


# joining two dataframe to large dataframe to perform broadcast
df_sale_details = df1.join(df_products, "product_id", "inner")
df_sale_details.show()


# In[143]:


# trying to optimized by partition
optimized_df = df_sale_details.repartition(4)
optimized_df.show()


# In[129]:


# optimizing by using broadcast join
Joined_df = optimized_df.join(broadcast(df_regions), "region_id", "inner")
Joined_df.show()


# In[144]:


# creating the temp view to show the results

Joined_df.createOrReplaceTempView("Joined_df")

# totol sales per category
total_sales_per_category = spark.sql("SELECT category, SUM(amount) AS Total_sales FROM Joined_df GROUP BY category")
total_sales_per_category.show()
total_sales_per_category.persist() # to store the result in memory or disk for further use


# In[145]:


# Total sales per region

total_sales_per_region = spark.sql("SELECT region_id, SUM(amount) AS total_sales FROM Joined_df GROUP BY region_id")
total_sales_per_region.show()
total_sales_per_region.persist()



# In[146]:


total_sales_per_category.write.csv(r"C:\Users\keert\Downloads\final.csv", header = True , mode="overwrite") # performing the write action as result in spark
total_sales_per_category.saveAsTextFile(r"C:\Users\keert\Downloads") # Note that PySpark requires Java 8 (except prior to 8u371), 11 or 17 with JAVA_HOME properly set. If using JDK 11, set -Dio.netty.tryReflectionSetAccessible=true for Arrow related features and refer to

Comments

Popular posts from this blog

session 19 Git Repository

  🔁 Steps to Create a Branch in Databricks, Pull from Git, and Merge into a Collaborative Branch Create a New Branch in Databricks: Go to the Repos tab in your workspace. Navigate to the Git-linked repo. Click the Git icon (or three dots ⋮) and choose "Create Branch." Give your branch a name (e.g., feature-xyz ) and confirm. Pull the Latest Changes from Git: With your new branch selected, click the Git icon again. Select “Pull” to bring the latest updates from the remote repository into your local Databricks environment. Make Changes & Commit: Edit notebooks or files as needed in your branch. Use the "Commit & Push" option to push changes to the remote repo. Merge into the Collaborative Branch: Switch to the collaborative branch (e.g., dev or main ) in Git or from the Databricks UI. Click "Pull & Merge" . Choose the branch you want to merge into the collaborative branch. Review the c...

Session 18 monitering and logging - Azure Monitor , Log analytics , and job notification

 After developing the code, we deploy it into the production environment. To monitor and logging the jobs run in the real time systems in azure  we have scheduled the jobs under the workflow , we haven't created any monitoring or any matrics . After a few times, the job failed, but we don't know because we haven't set up any monitoring, and every time we can't navigate to workspace-> workflows, under runs to see to check whether the job has been successfully running or not and in real time there will be nearly 100 jobs or more jobs to run  In real time, the production support team will monitor the process. Under the workflow, there is an option called Job notification. After setting the job notification, we can set a notification to email . if we click the date and time its takes us to the notebook which is scheduled there we can able to see the error where it happens . order to see more details, we need to under Spark tab, where we have the option to view logs ( tha...

Transformation - section 6 - data flow

  Feature from Slide Explanation ✅ Code-free data transformations Data Flows in ADF allow you to build transformations using a drag-and-drop visual interface , with no need for writing Spark or SQL code. ✅ Executed on Data Factory-managed Databricks Spark clusters Internally, ADF uses Azure Integration Runtimes backed by Apache Spark clusters , managed by ADF, not Databricks itself . While it's similar in concept, this is not the same as your own Databricks workspace . ✅ Benefits from ADF scheduling and monitoring Data Flows are fully integrated into ADF pipelines, so you get all the orchestration, parameterization, logging, and alerting features of ADF natively. ⚠️ Important Clarification Although it says "executed on Data Factory managed Databricks Spark clusters," this does not mean you're using your own Azure Databricks workspace . Rather: ADF Data Flows run on ADF-managed Spark clusters. Azure Databricks notebooks (which you trigger via an "Exe...