I have two email address in pyspark dataframe and need to validate both the email address columns value and then merge into 1 column value using pipe as delimiter.
Primary_Email_Address Alternate_Email_Address Output(email_address)
navg@gmail.com nvgng@gm@.com navg@gmail.com
ggg@gmail.com nnnn@gmail.com ggg@gmail.com|nnnn@gmail.com
nave@gmail.com|gg@gmail.com ndg@gmail.com nave@gmail.com|gg@gmail.com|ndg@gmail.com
I need to pass columns dynamically from spark dataframe csv file and handle it.
I have written below code but need some modification.
from pyspark.sql.session import SparkSession
from pyspark.sql.functions import concat, lit, col, trim, when
from pyspark.sql import functions as F
spark = SparkSession.builder.getOrCreate()
regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'
df = spark.read.option("header",True).csv("file_name.csv")
# select specific columns
df1 = df.select("primary_email_addr","alt_email_addr")
# concat the columns
df_email = df1.withColumn('email_addr',concat(df1['primary_email_addr'],lit("|"),df1['alt_email_addr'])))
df_email_1 = df_email.drop("primary_email_addr","alt_email_addr")
df_email_2 = df_email_1.withColumn("email_addr_status",when(F.col("email_addr").rlike("^(([a-zA-Z0-9_.+-]+)+@.+\\.[A-Za-z]+)(| ([a-zA-Z0-9_.+-]+)+@.+\\.[A-Za-z]+)*$"),"Valid").otherwise("Invalid"))
df_email_2.show(truncate=False)