

{"id":2685,"date":"2017-05-29T12:01:03","date_gmt":"2017-05-29T12:01:03","guid":{"rendered":"http:\/\/data-flair.training\/blogs\/?p=2685"},"modified":"2018-11-21T12:08:35","modified_gmt":"2018-11-21T06:38:35","slug":"apache-spark-dataset-tutorial","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/","title":{"rendered":"Spark Dataset Tutorial &#8211; Introduction to Apache Spark Dataset"},"content":{"rendered":"<h2>1. Objective &#8211; Apache Spark Dataset<\/h2>\n<p>Today, in\u00a0this blog on <a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-tutorial\/\"><strong>Apache Spark<\/strong><\/a> dataset, you can read all about what is dataset in Spark. Why the Spark DataSet needed, what is the encoder and what is their significance in the dataset? You will get the answer to all these questions in this blog. Moreover, we will also cover the features of the dataset in Apache Spark and How to create a dataset in this Spark tutorial.<\/p>\n<p>So, let&#8217;s start Spark Dataset Tutorial.<\/p>\n<div id=\"attachment_43108\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-43108\" class=\"size-full wp-image-43108\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg\" alt=\"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01-1024x536.jpg 1024w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01-520x272.jpg 520w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-43108\" class=\"wp-caption-text\">https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/<\/p><\/div>\n<h2>2. What is Spark Dataset?<\/h2>\n<p><strong>Dataset<\/strong> is a data structure in <strong><a href=\"http:\/\/data-flair.training\/blogs\/spark-sql-tutorial\/\">SparkSQL<\/a><\/strong> which is strongly typed and is a map to a relational schema. It represents structured queries with encoders. It is an extension to data frame API. Spark Dataset provides both type safety and object-oriented programming interface. We encounter the release of the dataset in Spark 1.6.<\/p>\n<p>The <strong>encoder<\/strong> is primary concept in <em>serialization<\/em> and <em>deserialization<\/em> (<strong>SerDes<\/strong>) framework in Spark SQL. Encoders translate between JVM objects and Spark\u2019s internal binary format. Spark has built-in encoders which are very advanced. They generate bytecode to interact with <strong>off-heap<\/strong> data.<br \/>\nAn encoder provides on-demand access to individual attributes without having to de-serialize an entire object. To make input-output time and space efficient, Spark SQL uses the SerDe framework. Since encoder knows the schema of record, it can achieve serialization and deserialization.<br \/>\nSpark Dataset is structured and lazy query expression that triggers the <strong>action<\/strong>. Internally dataset represents a logical plan. The<strong> logical plan<\/strong> tells the computational query that we need to produce the data. the logical plan is a base catalyst query plan for the logical operator to form a logical query plan. When we analyze this and resolve we can form a physical query plan.<br \/>\nDataset clubs the features of<strong><a href=\"http:\/\/data-flair.training\/blogs\/rdd-in-apache-spark\/\"> RDD<\/a><\/strong> and <strong><a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-sql-dataframe-tutorial\/\">DataFrame<\/a>.<\/strong> It provides:<\/p>\n<ul>\n<li>The convenience of RDD.<\/li>\n<li>Performance optimization of DataFrame.<\/li>\n<li>Static type-safety of <a href=\"http:\/\/data-flair.training\/blogs\/why-you-should-learn-scala-introductory-tutorial\/\"><strong>Scala<\/strong><\/a>.<\/li>\n<\/ul>\n<p>Thus, Datasets provides a more functional programming interface to work with structured data.<\/p>\n<h2>3. Need of Dataset in Spark<\/h2>\n<p>To overcome the<a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-rdd-limitations\/\"> limitations of RDD<\/a> and Dataframe, Dataset emerged. In DataFrame, there was no provision for <strong>compile-time type safety<\/strong>. Data cannot be altered without knowing its structure. In RDD there was no automatic optimization. So for optimization, we do it manually when needed.<\/p>\n<h2>4. Features of Dataset in Spark<\/h2>\n<p>After having the introduction to dataSet, let&#8217;s now discuss various features of Spark Dataset-<\/p>\n<h3>a. Optimized Query<\/h3>\n<p>Dataset in Spark provides Optimized query using <strong><a href=\"http:\/\/data-flair.training\/blogs\/spark-sql-optimization-catalyst-optimizer\/\">Catalyst Query Optimizer<\/a> <\/strong>and <strong>Tungsten<\/strong>. <strong>Catalyst Query Optimizer<\/strong> is an execution-agnostic framework. It represents and manipulates a data-flow graph. Data flow graph is a tree of expressions and relational operators. By optimizing the Spark job Tungsten improves the execution. Tungsten emphasizes the hardware architecture of the platform on which Apache Spark runs.<\/p>\n<h3>b. Analysis at compile time<\/h3>\n<p>Using Dataset we can check syntax and analysis at compile time. It is not possible using Dataframe, RDDs or regular SQL queries.<\/p>\n<h3>c.\u00a0Persistent Storage<\/h3>\n<p>Spark Datasets are both serializable and Queryable. Thus, we can save it to persistent storage.<\/p>\n<h3>d. Inter-convertible<\/h3>\n<p>We can convert the Type-safe dataset to an \u201cuntyped\u201d DataFrame. To do this task Datasetholder provide three methods for conversion from <em>Seq[T]<\/em> or <em>RDD[T]<\/em> types to <em>Dataset[T]:<\/em><\/p>\n<ul>\n<li><strong> <em>toDS(): Dataset[T]<\/em><\/strong><\/li>\n<li><strong> <em>toDF(): DataFrame <\/em><\/strong><\/li>\n<li><strong> <em>toDF(colNames: String*): DataFrame<\/em><\/strong><\/li>\n<\/ul>\n<h3>e. Faster Computation<\/h3>\n<p>The implementation of the Dataset is much faster than the RDD implementation. Thus increases the performance of the system. For the same performance using the RDD, the user manually considers how to express computation that parallelizes optimally.<\/p>\n<h3>f. Less Memory Consumption<\/h3>\n<p>While caching, it creates a more optimal layout. Spark knows the structure of data in the dataset.<\/p>\n<h3>g. Single API for Java and Scala<\/h3>\n<p>It provides a single interface for <strong>Java<\/strong> and <strong>Scala<\/strong>. This unification ensures we can use Scala interface, code examples from both languages. It also reduces the burden of libraries. As libraries have no longer to deal with two different type of inputs.<\/p>\n<h2>5. Creating Dataset<\/h2>\n<p>To create a Dataset we need:<\/p>\n<p><strong style=\"font-family: Verdana, Geneva, sans-serif\">a. SparkSession<\/strong><\/p>\n<p><em>SparkSession<\/em> is the entry point to the SparkSQL. It is a very first object that we create while developing Spark SQL applications using fully typed Dataset data abstractions. Using <strong>SparkSession.<\/strong>Builder, we can create an instance of SparkSession. And can stop SparkSession using the stop method (<strong><em>spark.stop<\/em><\/strong>). <strong>\u00a0<\/strong><\/p>\n<p><strong style=\"font-family: Verdana, Geneva, sans-serif\">b. QueryExecution<\/strong><\/p>\n<p>We represent structured query execution pipeline of the dataset using<em> QueryExecution<\/em>. To access QueryExecution of a Dataset use QueryExecution attribute. By executing a logical plan in Spark Session we get QueryExecution.<br \/>\n<em>executePlan(plan: LogicalPlan): QueryExecution<\/em><br \/>\n<strong>executePlan<\/strong>\u00a0executes the input\u00a0LogicalPlan\u00a0to produce a\u00a0QueryExecution in the current\u00a0SparkSession.<\/p>\n<p><strong style=\"font-family: Verdana, Geneva, sans-serif\">c. Encoder<\/strong><\/p>\n<p>An<em> encoder <\/em>provides conversion between tabular representation and JVM objects. With the help of the encoder, we serialize the object. Encoder serializes objects for processing or transmitting over the network encoders.<\/p>\n<p>So, this was all in Spark Dataset Tutorial. Hope you like our explanation.<\/p>\n<h2>6. Conclusion<\/h2>\n<p>Hence, in conclusion to Dataset, we can say it is a strongly typed data structure in Apache Spark. Moreover, it represents structured queries. Also, it fuses together the <a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-rdd-features\/\">functionality of RDD<\/a> and DataFrame. We can generate the optimized query using Dataset. So, Dataset lessens the memory consumption and provides a single API for both Java and Scala.<\/p>\n<p>If you like this post and feel that I have missed any point, so, do let me know by leaving a comment.<\/p>\n<p><strong>See Also-<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-rdd-vs-dataframe-vs-dataset\/\">Comparison Apache Spark RDD vs DataFrame vs Dataset.<\/a><\/li>\n<li><a href=\"http:\/\/data-flair.training\/blogs\/apache-spark-performance-tuning\/\">Performance tuning in Apache Spark.<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1. Objective &#8211; Apache Spark Dataset Today, in\u00a0this blog on Apache Spark dataset, you can read all about what is dataset in Spark. Why the Spark DataSet needed, what is the encoder and what&#46;&#46;&#46;<\/p>\n","protected":false},"author":6,"featured_media":43108,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[896,2405,3542,4545,8209,13048,16614,13058,13173],"class_list":["post-2685","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spark","tag-apache-spark","tag-catalyst-optimizer-in-spark","tag-dataset-features","tag-faster-computation","tag-less-memory-consumption","tag-spark-dataset","tag-spark-dataset-tutorial","tag-spark-encoders","tag-sparksession"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spark Dataset Tutorial - Introduction to Apache Spark Dataset - DataFlair<\/title>\n<meta name=\"description\" content=\"Spark dataset tutorial for Apache Spark dataset introduction, need of dataSet.Creating dataset in Spark, What is encoder in dataset &amp; Spark dataset features\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spark Dataset Tutorial - Introduction to Apache Spark Dataset - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Spark dataset tutorial for Apache Spark dataset introduction, need of dataSet.Creating dataset in Spark, What is encoder in dataset &amp; Spark dataset features\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-29T12:01:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-21T06:38:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spark Dataset Tutorial - Introduction to Apache Spark Dataset - DataFlair","description":"Spark dataset tutorial for Apache Spark dataset introduction, need of dataSet.Creating dataset in Spark, What is encoder in dataset & Spark dataset features","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/","og_locale":"en_US","og_type":"article","og_title":"Spark Dataset Tutorial - Introduction to Apache Spark Dataset - DataFlair","og_description":"Spark dataset tutorial for Apache Spark dataset introduction, need of dataSet.Creating dataset in Spark, What is encoder in dataset & Spark dataset features","og_url":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2017-05-29T12:01:03+00:00","article_modified_time":"2018-11-21T06:38:35+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89"},"headline":"Spark Dataset Tutorial &#8211; Introduction to Apache Spark Dataset","datePublished":"2017-05-29T12:01:03+00:00","dateModified":"2018-11-21T06:38:35+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/"},"wordCount":916,"commentCount":2,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg","keywords":["apache spark","Catalyst Optimizer in Spark","dataset features","Faster Computation","Less Memory Consumption","Spark dataset","Spark Dataset Tutorial","Spark encoders","SparkSession"],"articleSection":["Apache Spark Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/","url":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/","name":"Spark Dataset Tutorial - Introduction to Apache Spark Dataset - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg","datePublished":"2017-05-29T12:01:03+00:00","dateModified":"2018-11-21T06:38:35+00:00","description":"Spark dataset tutorial for Apache Spark dataset introduction, need of dataSet.Creating dataset in Spark, What is encoder in dataset & Spark dataset features","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2017\/05\/Spark-Dataset-01.jpg","width":1200,"height":628,"caption":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/apache-spark-dataset-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Apache Spark Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/spark\/"},{"@type":"ListItem","position":3,"name":"Spark Dataset Tutorial &#8211; Introduction to Apache Spark Dataset"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"The DataFlair Team provides industry-driven content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our expert educators focus on delivering value-packed, easy-to-follow resources for tech enthusiasts and professionals.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam2\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/2685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=2685"}],"version-history":[{"count":5,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/2685\/revisions"}],"predecessor-version":[{"id":43111,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/2685\/revisions\/43111"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/43108"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=2685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=2685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=2685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}