RDD, which stands for Resilient Distributed Dataset, is a fundamental data structure in Apache Spark, a distributed computing framework for big data processing. RDDs are immutable, partitioned collections of objects that can be processed in parallel across a cluster of machines. The term "resilient" in RDD refers to the fault-tolerance feature, meaning that RDDs can recover lost data due to node failures. Here are some key characteristics and properties of RDDs in PySpark: # Immutable: Once created, RDDs cannot be modified. However, you can transform them into new RDDs by applying various operations. # Distributed: RDDs are distributed across multiple nodes in a cluster, allowing for parallel processing. # Partitioned: RDDs are divided into partitions, which are the basic units of parallelism. Each partition can be processed independently on different nodes. # Lazy Evaluation: Transformations on RDDs are lazily evaluated, meaning that the execution is deferred until an action is triggered. This helps optimize the execution plan and avoid unnecessary computations. # Fault-Tolerant: RDDs track the lineage information to recover lost data in case of node failures. This is achieved through the ability to recompute lost partitions based on the transformations applied to the original data. In PySpark, you can create RDDs from existing data in memory or by loading data from external sources such as HDFS, HBase, or other storage systems. Once created, you can perform various transformations (e.g., map, filter, reduce) and actions (e.g., count, collect, save) on RDDs. However, it's worth noting that while RDDs were the primary abstraction in earlier versions of Spark, newer versions have introduced higher-level abstractions like DataFrames and Datasets, which provide a more structured and optimized API for data manipulation and analysis. These abstractions are built on top of RDDs and offer better performance and ease of use in many scenarios.
Showing posts with label Spark. Show all posts
Showing posts with label Spark. Show all posts
Saturday, March 9, 2024
What is an RDD in PySpark?
5 Questions on PySpark Technology
Q1 of 5 Which of the below Spark Core API is used to load the retail.csv file and create RDD? retailRDD = sc.readFile("/HDFSPATH/retail.csv") retailRDD = sc.parallelize("/HDFSPATH/retail.csv") retailRDD = sc.textFile("/HDFSPATH/retail.csv") *** retailRDD = sc.createFile("/HDFSPATH/retail.csv") Q2 of 5 Shane works in data analytics project and needs to process Users event data (UserLogs.csv file). Which of the below code snippet can be used to split the fields with a comma as a delimiter and fetch only the first two fields from it? logsRDD = sc.textFile("/HDFSPATH/UserLogs.csv"); FieldsRDD = logsRDD.map(lambda r : r.split(",")).map(lambda r: (r[0],r[1])) *** logsRDD = sc.parallelize("/HDFSPATH/UserLogs.csv"); FieldsRDD = logsRDD.map(lambda r : r.split(",")).map(lambda r: (r[0],r[1])) logsRDD = sc.parallelize("/HDFSPATH/UserLogs.csv"); FieldsRDD = logsRDD.filter(lambda r : r.split(",")).map(lambda r: (r[0],r[1])) logsRDD = sc.textFile("/HDFSPATH/UserLogs.csv"); FieldsRDD = logsRDD.filter(lambda r : r.split(",")).map(lambda r: (r[0],r[1])) Q3 of 5 Consider a retail scenario where a paired RDD exists with data (ProductName, Price). Price value must be reduced by 500 as a customer discount. Which paired RDD function in spark can be used for this requirement? mapValues() keys() values() map() --- mapValues applies the function logic to the value part of the paired RDD without changing the key Q4 of 5 Consider a banking scenario where credit card transaction logs need to be processed. The log contains CustomerID, CustomerName, CreditCard Number, and TransactionAmount fields. Which code snippet below creates a paired RDD ? logsRDD = sc.textFile("/HDFSPath/Logs.txt"); logsRDD = sc.textFile("/HDFSPath/Logs.txt"); LogsPairedRDD = logsRDD.map(lambda r : r.split(",")).map(lambda r: (r[0],int(r[3]))) *** logsRDD = sc.textFile("/HDFSPath/Logs.txt"); LogsPairedRDD = logsRDD.map(lambda r : r.split(",")).map(lambda r: (r[0],int(r[2]))) logsRDD = sc.textFile("/HDFSPath/Logs.txt").map(lambda r: (r[0],int(r[3]))) Q5 of 5 Consider a Spark scenario where an array must be used as a Broadcast variable. Which of the below code snippet is used to access the broadcast variable value? bv = sc.broadcast(Array(100,200,300)) bv.getValue --- bv = sc.broadcast(Array(100,200,300)) bv.value bv = sc.broadcast(Array(100,200,300)) bv.find bv = sc.broadcast(Array(100,200,300)) bv.fetchValueSpark Core Challenges
Business Scenario Arisconn Cars provides rental car service across the globe. To improve their customer service, the client wants to analyze periodically each car’s sensor data to repair faults and problems in the car. Sensor data from cars are streamed through events hub (data ingestion tool) into Hadoop's HDFS (distributed file system) and analyzed using Spark Core programming to find out cars generating maximum errors. This analysis would help Arisconn to send the service team to repair the cars even before they fail. Below is the Schema of the big dataset of Arisconn Cars which holds 10 million records approximately. [sensorID, carID, latitude, longitude, engine_speed, accelerator_pedal_position, vehicle_speed, torque_at_transmission, fuel_level, typeOfMessage, timestamp] typeOfMessage: INFO, WARN, ERR, DEBUG Arisconn has the below set of requirements to be performed against the dataset: Filter fields - Sensor id, Car id, Latitude, Longitude, Vehicle Speed, TypeOfMessage Filter valid records i.e., discard records containing '?' Filter records holding only error messages (ignore warnings and info messages) Apply aggregation to count number of error messages produced by cars Below is the Python code to implement the first three requirements. #Loading a text file in to an RDD Car_Info = sc.textFile("/HDFSPath/ArisconnDataset.txt"); #Referring the header of the file header=Car_Info.first() #Removing header and splitting records with ',' as delimiter and fetching relevant fields Car_temp = Car_Info.filter(lambda record:record!=header).map(lambda r:r.split(",")).map(lambda c:(c[0],c[1],float([2]),float(c[4]),int(c[6]),c[9])); #Filtering only valid records(records not starting with '?'), and f[1] refers to first field (sensorid) Car_Eng_Specs = Car_temp.filter(lambda f:str(f[1]).startswith("?")) #Filtering records holding only error messages and f[6] refers to 6th field (Typeofmessage) Car_Error_logs = Car_Eng_Specs.filter(lambda f:str(f[6]).startswith("ERR")) In the above code, Arisconn's dataset is loaded into RDD (Car_Info) The header of the dataset is removed and only fields (sensorid, carid, latitude, longitude, vehiclespeed, TypeOfMessage) are filtered. Refer to RDD Car_temp Records starting with '?' are removed. Refer to RDD Car_Eng_Specs. Records containing TypeOfMessage = "ERR" get filtered There are few challenges in the above code and even the fourth requirement is too complex to implement in Spark Core. We shall discuss this next.
Sunday, February 12, 2023
PySpark Books (2023 Feb)
Download Books
1. Tomasz Drabas, Denny Lee Packt Publishing Ltd, 27-Feb-2017 2. Data Analysis with Python and PySpark Jonathan Rioux Simon and Schuster, 12-Apr-2022 3. PySpark Cookbook: Over 60 recipes for implementing big data processing and analytics using Apache Spark and Python Denny Lee, Tomasz Drabas Packt Publishing Ltd, 29-Jun-2018 4. Machine Learning with PySpark: With Natural Language Processing and Recommender Systems Pramod Singh Apress, 14-Dec-2018 5. Learning Spark: Lightning-Fast Big Data Analysis Holden Karau, Andy Konwinski, Patrick Wendell, Matei Zaharia "O'Reilly Media, Inc.", 28-Jan-2015 6. Advanced Analytics with PySpark Akash Tandon, Sandy Ryza, Sean Owen, Uri Laserson, Josh Wills "O'Reilly Media, Inc.", 14-Jun-2022 7. PySpark Recipes: A Problem-Solution Approach with PySpark2 Raju Kumar Mishra Apress, 09-Dec-2017 8. Learn PySpark: Build Python-based Machine Learning and Deep Learning Models Pramod Singh Apress, 06-Sept-2019 9. Learning Spark Jules S. Damji, Brooke Wenig, Tathagata Das, Denny Lee "O'Reilly Media, Inc.", 16-Jul-2020 10. Advanced Analytics with Spark: Patterns for Learning from Data at Scale Sandy Ryza, Uri Laserson, Sean Owen, Josh Wills "O'Reilly Media, Inc.", 12-Jun-2017 11. Applied Data Science Using PySpark: Learn the End-to-End Predictive Model-Building Cycle Ramcharan Kakarla, Sundar Krishnan, Sridhar Alla Apress, 2021 12. Essential PySpark for Scalable Data Analytics: A beginner's guide to harnessing the power and ease of PySpark 3 Sreeram Nudurupati Packt Publishing Ltd, 29-Oct-2021 13. Spark: The Definitive Guide: Big Data Processing Made Simple Bill Chambers, Matei Zaharia "O'Reilly Media, Inc.", 08-Feb-2018 14. Spark for Python Developers Amit Nandi Packt Publishing, 24-Dec-2015 15. Frank Kane's Taming Big Data with Apache Spark and Python Frank Kane Packt Publishing Ltd, 30-Jun-2017 16. Stream Processing with Apache Spark: Mastering Structured Streaming and Spark Streaming Gerard Maas, Francois Garillot "O'Reilly Media, Inc.", 05-Jun-2019 17. Data Analytics with Spark Using Python Jeffrey Aven Addison-Wesley Professional, 18-Jun-2018 18. Graph Algorithms: Practical Examples in Apache Spark and Neo4j Mark Needham, Amy E. Hodler "O'Reilly Media, Inc.", 16-May-2019 19. Spark in Action: Covers Apache Spark 3 with Examples in Java, Python, and Scala Jean-Georges Perrin Simon and Schuster, 12-May-2020 20. Mastering Spark with R: The Complete Guide to Large-Scale Analysis and Modeling Javier Luraschi, Kevin Kuo, Edgar Ruiz "O'Reilly Media, Inc.", 07-Oct-2019 21. High Performance Spark: Best Practices for Scaling and Optimizing Apache Spark Holden Karau, Rachel Warren "O'Reilly Media, Inc.", 25-May-2017 22. Apache Spark in 24 Hours, Sams Teach Yourself Jeffrey Aven Sams Publishing, 31-Aug-2016Tags: List of Books,Spark,
Wednesday, February 8, 2023
Spark SQL in Images
Tags: Spark,Technology,1. Spark's components
2. Spark SQL Architecture
3. SQL Data Types
4. Spark's context objects
5. File Formats Supported By Spark
6. SQL Workflow
7. Catalyst Optimizer
Below steps explain the workflow of the catalyst optimizer: 1. Analyzing a logical plan with the metadata 2. Optimizing the logical plan 3. Creating multiple physical plans 4. Analyzing the plans and finding the most optimal physical plan 5. Converting the physical plan to RDDs
A Solved Exercise in RDD Filter and Join Operations (Interview Preparation)
Download Code and Data
Problem Statement: Consider the Universal Identity Number data scenario with two datasets UIN Customer data and Bank account linking data. UIN Card data (UINCardData.csv): Schema Details: UIN, MobileNumber,Gender,SeniorCitizens,Income Bank account link data (BankAccountLink.csv): Schema Details: MobileNumber, LinkedtoBankAccount, BankAccountNumber Requirement Join both datasets and find the UIN number that is not linked with the Bank Account number. Print UIN number and BankAccountNumber. Save the final output to a specified HDFS directory.
In [39]:
from pyspark import SparkContext
sc = SparkContext.getOrCreate()
In [73]:
uin = sc.textFile("./UINCardData.csv")
In [74]:
uin.take(5)
Out[74]:
['UIN00001,982120000,Male,N,65000', 'UIN00002,982120001,Male,N,35000', 'UIN00003,982120002,Male,N,34000', 'UIN00004,982120003,Male,Y,44000', 'UIN00005,982120004,Male,N,54000']
In [75]:
from collections import namedtuple
UINCARD = namedtuple('UINCARD', ['UIN', 'MobileNumber'])
In [76]:
uin = uin.map(lambda line:line.split(",")).map(lambda r : (r[1], UINCARD(r[0], r[1])))
In [77]:
uin.take(5)
Out[77]:
[('982120000', UINCARD(UIN='UIN00001', MobileNumber='982120000')), ('982120001', UINCARD(UIN='UIN00002', MobileNumber='982120001')), ('982120002', UINCARD(UIN='UIN00003', MobileNumber='982120002')), ('982120003', UINCARD(UIN='UIN00004', MobileNumber='982120003')), ('982120004', UINCARD(UIN='UIN00005', MobileNumber='982120004'))]
In [90]:
bankacc = sc.textFile("BankAccountLink.csv")
In [91]:
print(bankacc.count())
bankacc.take(5)
500
Out[91]:
['982120000,Y,20004562111', '982120001,Y,20004562112', '982120002,Y,20004562113', '982120003,Y,20004562114', '982120004,Y,20004562115']
In [92]:
bankacc = bankacc.filter(lambda r: r.split(",")[1] == 'N')
In [94]:
print(bankacc.count())
bankacc.take(5)
53
Out[94]:
['982120006,N,20004552111', '982120018,N,20004552112', '982120019,N,20004552113', '982120020,N,20004552114', '982120021,N,20004552115']
In [95]:
BANKACC = namedtuple('BANKACC', ['MobileNumber', 'LinkedtoBankAccount', 'BankAccountNumber'])
In [96]:
bankacc = bankacc.map(lambda line:line.split(",")).map(lambda r : (r[0], BANKACC(r[0], r[1], r[2])))
In [97]:
bankacc.take(5)
Out[97]:
[('982120006', BANKACC(MobileNumber='982120006', LinkedtoBankAccount='N', BankAccountNumber='20004552111')), ('982120018', BANKACC(MobileNumber='982120018', LinkedtoBankAccount='N', BankAccountNumber='20004552112')), ('982120019', BANKACC(MobileNumber='982120019', LinkedtoBankAccount='N', BankAccountNumber='20004552113')), ('982120020', BANKACC(MobileNumber='982120020', LinkedtoBankAccount='N', BankAccountNumber='20004552114')), ('982120021', BANKACC(MobileNumber='982120021', LinkedtoBankAccount='N', BankAccountNumber='20004552115'))]
In [98]:
result = uin.join(bankacc)
In [99]:
result.collect()
Out[99]:
[('982120006', (UINCARD(UIN='UIN00007', MobileNumber='982120006'), BANKACC(MobileNumber='982120006', LinkedtoBankAccount='N', BankAccountNumber='20004552111'))), ('982120020', (UINCARD(UIN='UIN00021', MobileNumber='982120020'), BANKACC(MobileNumber='982120020', LinkedtoBankAccount='N', BankAccountNumber='20004552114'))), ('982120048', (UINCARD(UIN='UIN00049', MobileNumber='982120048'), BANKACC(MobileNumber='982120048', LinkedtoBankAccount='N', BankAccountNumber='20004552124'))), ('982120049', (UINCARD(UIN='UIN00050', MobileNumber='982120049'), BANKACC(MobileNumber='982120049', LinkedtoBankAccount='N', BankAccountNumber='20004552125'))), ('982120297', (UINCARD(UIN='UIN00298', MobileNumber='982120297'), BANKACC(MobileNumber='982120297', LinkedtoBankAccount='N', BankAccountNumber='20004552912'))), ('982120301', (UINCARD(UIN='UIN00302', MobileNumber='982120301'), BANKACC(MobileNumber='982120301', LinkedtoBankAccount='N', BankAccountNumber='20004552916'))), ('982120313', (UINCARD(UIN='UIN00314', MobileNumber='982120313'), BANKACC(MobileNumber='982120313', LinkedtoBankAccount='N', BankAccountNumber='20004552928'))), ('982120324', (UINCARD(UIN='UIN00325', MobileNumber='982120324'), BANKACC(MobileNumber='982120324', LinkedtoBankAccount='N', BankAccountNumber='20004552939'))), ('982120018', (UINCARD(UIN='UIN00019', MobileNumber='982120018'), BANKACC(MobileNumber='982120018', LinkedtoBankAccount='N', BankAccountNumber='20004552112'))), ('982120019', (UINCARD(UIN='UIN00020', MobileNumber='982120019'), BANKACC(MobileNumber='982120019', LinkedtoBankAccount='N', BankAccountNumber='20004552113'))), ('982120021', (UINCARD(UIN='UIN00022', MobileNumber='982120021'), BANKACC(MobileNumber='982120021', LinkedtoBankAccount='N', BankAccountNumber='20004552115'))), ('982120022', (UINCARD(UIN='UIN00023', MobileNumber='982120022'), BANKACC(MobileNumber='982120022', LinkedtoBankAccount='N', BankAccountNumber='20004552116'))), ('982120030', (UINCARD(UIN='UIN00031', MobileNumber='982120030'), BANKACC(MobileNumber='982120030', LinkedtoBankAccount='N', BankAccountNumber='20004552118'))), ('982120033', (UINCARD(UIN='UIN00034', MobileNumber='982120033'), BANKACC(MobileNumber='982120033', LinkedtoBankAccount='N', BankAccountNumber='20004552121'))), ('982120046', (UINCARD(UIN='UIN00047', MobileNumber='982120046'), BANKACC(MobileNumber='982120046', LinkedtoBankAccount='N', BankAccountNumber='20004552122'))), ('982120047', (UINCARD(UIN='UIN00048', MobileNumber='982120047'), BANKACC(MobileNumber='982120047', LinkedtoBankAccount='N', BankAccountNumber='20004552123'))), ('982120052', (UINCARD(UIN='UIN00053', MobileNumber='982120052'), BANKACC(MobileNumber='982120052', LinkedtoBankAccount='N', BankAccountNumber='20004552128'))), ('982120300', (UINCARD(UIN='UIN00301', MobileNumber='982120300'), BANKACC(MobileNumber='982120300', LinkedtoBankAccount='N', BankAccountNumber='20004552915'))), ('982120309', (UINCARD(UIN='UIN00310', MobileNumber='982120309'), BANKACC(MobileNumber='982120309', LinkedtoBankAccount='N', BankAccountNumber='20004552924'))), ('982120310', (UINCARD(UIN='UIN00311', MobileNumber='982120310'), BANKACC(MobileNumber='982120310', LinkedtoBankAccount='N', BankAccountNumber='20004552925'))), ('982120312', (UINCARD(UIN='UIN00313', MobileNumber='982120312'), BANKACC(MobileNumber='982120312', LinkedtoBankAccount='N', BankAccountNumber='20004552927'))), ('982120315', (UINCARD(UIN='UIN00316', MobileNumber='982120315'), BANKACC(MobileNumber='982120315', LinkedtoBankAccount='N', BankAccountNumber='20004552930'))), ('982120316', (UINCARD(UIN='UIN00317', MobileNumber='982120316'), BANKACC(MobileNumber='982120316', LinkedtoBankAccount='N', BankAccountNumber='20004552931'))), ('982120317', (UINCARD(UIN='UIN00318', MobileNumber='982120317'), BANKACC(MobileNumber='982120317', LinkedtoBankAccount='N', BankAccountNumber='20004552932'))), ('982120318', (UINCARD(UIN='UIN00319', MobileNumber='982120318'), BANKACC(MobileNumber='982120318', LinkedtoBankAccount='N', BankAccountNumber='20004552933'))), ('982120320', (UINCARD(UIN='UIN00321', MobileNumber='982120320'), BANKACC(MobileNumber='982120320', LinkedtoBankAccount='N', BankAccountNumber='20004552935'))), ('982120325', (UINCARD(UIN='UIN00326', MobileNumber='982120325'), BANKACC(MobileNumber='982120325', LinkedtoBankAccount='N', BankAccountNumber='20004552940'))), ('982120031', (UINCARD(UIN='UIN00032', MobileNumber='982120031'), BANKACC(MobileNumber='982120031', LinkedtoBankAccount='N', BankAccountNumber='20004552119'))), ('982120051', (UINCARD(UIN='UIN00052', MobileNumber='982120051'), BANKACC(MobileNumber='982120051', LinkedtoBankAccount='N', BankAccountNumber='20004552127'))), ('982120053', (UINCARD(UIN='UIN00054', MobileNumber='982120053'), BANKACC(MobileNumber='982120053', LinkedtoBankAccount='N', BankAccountNumber='20004552129'))), ('982120055', (UINCARD(UIN='UIN00056', MobileNumber='982120055'), BANKACC(MobileNumber='982120055', LinkedtoBankAccount='N', BankAccountNumber='20004552131'))), ('982120298', (UINCARD(UIN='UIN00299', MobileNumber='982120298'), BANKACC(MobileNumber='982120298', LinkedtoBankAccount='N', BankAccountNumber='20004552913'))), ('982120299', (UINCARD(UIN='UIN00300', MobileNumber='982120299'), BANKACC(MobileNumber='982120299', LinkedtoBankAccount='N', BankAccountNumber='20004552914'))), ('982120304', (UINCARD(UIN='UIN00305', MobileNumber='982120304'), BANKACC(MobileNumber='982120304', LinkedtoBankAccount='N', BankAccountNumber='20004552919'))), ('982120306', (UINCARD(UIN='UIN00307', MobileNumber='982120306'), BANKACC(MobileNumber='982120306', LinkedtoBankAccount='N', BankAccountNumber='20004552921'))), ('982120307', (UINCARD(UIN='UIN00308', MobileNumber='982120307'), BANKACC(MobileNumber='982120307', LinkedtoBankAccount='N', BankAccountNumber='20004552922'))), ('982120314', (UINCARD(UIN='UIN00315', MobileNumber='982120314'), BANKACC(MobileNumber='982120314', LinkedtoBankAccount='N', BankAccountNumber='20004552929'))), ('982120319', (UINCARD(UIN='UIN00320', MobileNumber='982120319'), BANKACC(MobileNumber='982120319', LinkedtoBankAccount='N', BankAccountNumber='20004552934'))), ('982120029', (UINCARD(UIN='UIN00030', MobileNumber='982120029'), BANKACC(MobileNumber='982120029', LinkedtoBankAccount='N', BankAccountNumber='20004552117'))), ('982120032', (UINCARD(UIN='UIN00033', MobileNumber='982120032'), BANKACC(MobileNumber='982120032', LinkedtoBankAccount='N', BankAccountNumber='20004552110'))), ('982120050', (UINCARD(UIN='UIN00051', MobileNumber='982120050'), BANKACC(MobileNumber='982120050', LinkedtoBankAccount='N', BankAccountNumber='20004552126'))), ('982120054', (UINCARD(UIN='UIN00055', MobileNumber='982120054'), BANKACC(MobileNumber='982120054', LinkedtoBankAccount='N', BankAccountNumber='20004552130'))), ('982120056', (UINCARD(UIN='UIN00057', MobileNumber='982120056'), BANKACC(MobileNumber='982120056', LinkedtoBankAccount='N', BankAccountNumber='20004552132'))), ('982120296', (UINCARD(UIN='UIN00297', MobileNumber='982120296'), BANKACC(MobileNumber='982120296', LinkedtoBankAccount='N', BankAccountNumber='20004552911'))), ('982120302', (UINCARD(UIN='UIN00303', MobileNumber='982120302'), BANKACC(MobileNumber='982120302', LinkedtoBankAccount='N', BankAccountNumber='20004552917'))), ('982120303', (UINCARD(UIN='UIN00304', MobileNumber='982120303'), BANKACC(MobileNumber='982120303', LinkedtoBankAccount='N', BankAccountNumber='20004552918'))), ('982120305', (UINCARD(UIN='UIN00306', MobileNumber='982120305'), BANKACC(MobileNumber='982120305', LinkedtoBankAccount='N', BankAccountNumber='20004552920'))), ('982120308', (UINCARD(UIN='UIN00309', MobileNumber='982120308'), BANKACC(MobileNumber='982120308', LinkedtoBankAccount='N', BankAccountNumber='20004552923'))), ('982120311', (UINCARD(UIN='UIN00312', MobileNumber='982120311'), BANKACC(MobileNumber='982120311', LinkedtoBankAccount='N', BankAccountNumber='20004552926'))), ('982120321', (UINCARD(UIN='UIN00322', MobileNumber='982120321'), BANKACC(MobileNumber='982120321', LinkedtoBankAccount='N', BankAccountNumber='20004552936'))), ('982120322', (UINCARD(UIN='UIN00323', MobileNumber='982120322'), BANKACC(MobileNumber='982120322', LinkedtoBankAccount='N', BankAccountNumber='20004552937'))), ('982120323', (UINCARD(UIN='UIN00324', MobileNumber='982120323'), BANKACC(MobileNumber='982120323', LinkedtoBankAccount='N', BankAccountNumber='20004552938'))), ('982120326', (UINCARD(UIN='UIN00327', MobileNumber='982120326'), BANKACC(MobileNumber='982120326', LinkedtoBankAccount='N', BankAccountNumber='20004552941')))]
In [ ]: