{"id":423,"date":"2017-08-30T01:01:46","date_gmt":"2017-08-29T17:01:46","guid":{"rendered":"http:\/\/vinta.ws\/code\/?p=423"},"modified":"2026-03-17T01:18:03","modified_gmt":"2026-03-16T17:18:03","slug":"setup-spark-scala-and-maven-with-intellij-idea","status":"publish","type":"post","link":"https:\/\/vinta.ws\/code\/setup-spark-scala-and-maven-with-intellij-idea.html","title":{"rendered":"Setup Spark, Scala and Maven with Intellij IDEA"},"content":{"rendered":"<p>IntelliJ IDEA supports Scala and Apache Spark perfectly. You're able to browse a complete Spark project built with IntelliJ IDEA on GitHub: <a href=\"https:\/\/github.com\/vinta\/albedo\">https:\/\/github.com\/vinta\/albedo<\/a><\/p>\n<p>Useful Plugins:<\/p>\n<ul>\n<li><a href=\"https:\/\/plugins.jetbrains.com\/plugin\/1347-scala\">https:\/\/plugins.jetbrains.com\/plugin\/1347-scala<\/a><\/li>\n<li><a href=\"https:\/\/plugins.jetbrains.com\/plugin\/9333-makefile-support\">https:\/\/plugins.jetbrains.com\/plugin\/9333-makefile-support<\/a><\/li>\n<\/ul>\n<h2>Initiate a Maven Project<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ mvn archetype:generate\nChoose a number: xxx\nxxx: remote -&gt; net.alchim31.maven:scala-archetype-simple<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/docs.scala-lang.org\/tutorials\/scala-with-maven.html\">https:\/\/docs.scala-lang.org\/tutorials\/scala-with-maven.html<\/a><\/p>\n<h2>Example Configurations<\/h2>\n<p>The remaining section of this article assumes that you use this <code>pom.xml<\/code> which should be able to work out of the box.<\/p>\n<pre class=\"line-numbers\"><code class=\"language-xml\">&lt;!-- in pom.xml --&gt;\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n  &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n  &lt;groupId&gt;ws.vinta&lt;\/groupId&gt;\n  &lt;artifactId&gt;albedo&lt;\/artifactId&gt;\n  &lt;version&gt;1.0.0-SNAPSHOT&lt;\/version&gt;\n  &lt;packaging&gt;jar&lt;\/packaging&gt;\n  &lt;name&gt;${project.artifactId}&lt;\/name&gt;\n  &lt;description&gt;A recommender system for discovering GitHub repos&lt;\/description&gt;\n  &lt;url&gt;https:\/\/github.com\/vinta\/albedo&lt;\/url&gt;\n  &lt;inceptionYear&gt;2017&lt;\/inceptionYear&gt;\n  &lt;properties&gt;\n    &lt;java.version&gt;1.8&lt;\/java.version&gt;\n    &lt;scala.version&gt;2.11.8&lt;\/scala.version&gt;\n    &lt;scala.compactVersion&gt;2.11&lt;\/scala.compactVersion&gt;\n    &lt;spark.version&gt;2.2.0&lt;\/spark.version&gt;\n    &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n  &lt;\/properties&gt;\n  &lt;repositories&gt;\n    &lt;repository&gt;\n      &lt;id&gt;spark-packages&lt;\/id&gt;\n      &lt;name&gt;Spark Packages Repository&lt;\/name&gt;\n      &lt;url&gt;https:\/\/dl.bintray.com\/spark-packages\/maven\/&lt;\/url&gt;\n    &lt;\/repository&gt;\n  &lt;\/repositories&gt;\n  &lt;dependencies&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.scala-lang\/scala-library --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.scala-lang&lt;\/groupId&gt;\n      &lt;artifactId&gt;scala-library&lt;\/artifactId&gt;\n      &lt;version&gt;${scala.version}&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.spark\/spark-core_2.11 --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.apache.spark&lt;\/groupId&gt;\n      &lt;artifactId&gt;spark-core_${scala.compactVersion}&lt;\/artifactId&gt;\n      &lt;version&gt;${spark.version}&lt;\/version&gt;\n      &lt;scope&gt;compile&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.spark\/spark-sql_2.11 --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.apache.spark&lt;\/groupId&gt;\n      &lt;artifactId&gt;spark-sql_${scala.compactVersion}&lt;\/artifactId&gt;\n      &lt;version&gt;${spark.version}&lt;\/version&gt;\n      &lt;scope&gt;compile&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.spark\/spark-mllib_2.11 --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.apache.spark&lt;\/groupId&gt;\n      &lt;artifactId&gt;spark-mllib_${scala.compactVersion}&lt;\/artifactId&gt;\n      &lt;version&gt;${spark.version}&lt;\/version&gt;\n      &lt;scope&gt;compile&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/mysql\/mysql-connector-java --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;mysql&lt;\/groupId&gt;\n      &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\n      &lt;version&gt;5.1.42&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.apache.httpcomponents\/httpclient --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.apache.httpcomponents&lt;\/groupId&gt;\n      &lt;artifactId&gt;httpclient&lt;\/artifactId&gt;\n      &lt;version&gt;4.5.2&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.elasticsearch.client\/elasticsearch-rest-high-level-client --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;org.elasticsearch.client&lt;\/groupId&gt;\n      &lt;artifactId&gt;elasticsearch-rest-high-level-client&lt;\/artifactId&gt;\n      &lt;version&gt;5.6.2&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/com.hankcs\/hanlp --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;com.hankcs&lt;\/groupId&gt;\n      &lt;artifactId&gt;hanlp&lt;\/artifactId&gt;\n      &lt;version&gt;portable-1.3.4&lt;\/version&gt;\n    &lt;\/dependency&gt;\n    &lt;!-- https:\/\/mvnrepository.com\/artifact\/com.github.rholder\/snowball-stemmer --&gt;\n    &lt;dependency&gt;\n      &lt;groupId&gt;com.github.rholder&lt;\/groupId&gt;\n      &lt;artifactId&gt;snowball-stemmer&lt;\/artifactId&gt;\n      &lt;version&gt;1.3.0.581.1&lt;\/version&gt;\n    &lt;\/dependency&gt;\n  &lt;\/dependencies&gt;\n  &lt;build&gt;\n    &lt;sourceDirectory&gt;src\/main\/scala&lt;\/sourceDirectory&gt;\n    &lt;testSourceDirectory&gt;src\/test\/scala&lt;\/testSourceDirectory&gt;\n    &lt;plugins&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;3.6.1&lt;\/version&gt;\n        &lt;configuration&gt;\n          &lt;source&gt;${java.version}&lt;\/source&gt;\n          &lt;target&gt;${java.version}&lt;\/target&gt;\n          &lt;encoding&gt;UTF-8&lt;\/encoding&gt;\n        &lt;\/configuration&gt;\n      &lt;\/plugin&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;net.alchim31.maven&lt;\/groupId&gt;\n        &lt;artifactId&gt;scala-maven-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;3.2.1&lt;\/version&gt;\n        &lt;executions&gt;\n          &lt;execution&gt;\n            &lt;goals&gt;\n              &lt;goal&gt;compile&lt;\/goal&gt;\n              &lt;goal&gt;testCompile&lt;\/goal&gt;\n            &lt;\/goals&gt;\n          &lt;\/execution&gt;\n        &lt;\/executions&gt;\n      &lt;\/plugin&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;maven-install-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;2.5.2&lt;\/version&gt;\n        &lt;configuration&gt;\n          &lt;skip&gt;true&lt;\/skip&gt;\n        &lt;\/configuration&gt;\n      &lt;\/plugin&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;maven-shade-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;3.1.0&lt;\/version&gt;\n        &lt;executions&gt;\n          &lt;execution&gt;\n           &lt;phase&gt;install&lt;\/phase&gt;\n            &lt;goals&gt;\n              &lt;goal&gt;shade&lt;\/goal&gt;\n            &lt;\/goals&gt;\n            &lt;configuration&gt;\n              &lt;filters&gt;\n                &lt;filter&gt;\n                  &lt;artifact&gt;*:*&lt;\/artifact&gt;\n                  &lt;excludes&gt;\n                    &lt;exclude&gt;META-INF\/*.DSA&lt;\/exclude&gt;\n                    &lt;exclude&gt;META-INF\/*.RSA&lt;\/exclude&gt;\n                    &lt;exclude&gt;META-INF\/*.SF&lt;\/exclude&gt;\n                  &lt;\/excludes&gt;\n                &lt;\/filter&gt;\n              &lt;\/filters&gt;\n              &lt;artifactSet&gt;\n                &lt;excludes&gt;\n                  &lt;exclude&gt;com.apple:AppleJavaExtensions:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;javax.servlet:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.hadoop:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.maven.plugins:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.parquet:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.spark:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.scala-lang:*&lt;\/exclude&gt;\n                &lt;\/excludes&gt;\n              &lt;\/artifactSet&gt;\n              &lt;finalName&gt;${project.artifactId}-${project.version}-uber&lt;\/finalName&gt;\n            &lt;\/configuration&gt;\n          &lt;\/execution&gt;\n        &lt;\/executions&gt;\n      &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n  &lt;\/build&gt;\n&lt;\/project&gt;<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/davidb.github.io\/scala-maven-plugin\/example_compile.html\">https:\/\/davidb.github.io\/scala-maven-plugin\/example_compile.html<\/a><\/p>\n<h2>Generate a Thin JAR<\/h2>\n<p>Thin JAR only contains classes that you created, which means you should include your dependencies externally.<\/p>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ mvn clean package -DskipTests<\/code><\/pre>\n<p>You're able to specify different classes in the same JAR.<\/p>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ spark-submit \n--master spark:\/\/localhost:7077 \n--packages \"mysql:mysql-connector-java:5.1.41\" \n--class ws.vinta.albedo.LogisticRegressionRanker \ntarget\/albedo-1.0.0-SNAPSHOT.jar<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/1082580\/how-to-build-jars-from-intellij-properly\">https:\/\/stackoverflow.com\/questions\/1082580\/how-to-build-jars-from-intellij-properly<\/a><br \/>\n<a href=\"https:\/\/spark.apache.org\/docs\/latest\/submitting-applications.html\">https:\/\/spark.apache.org\/docs\/latest\/submitting-applications.html<\/a><\/p>\n<h2>Generate a Fat JAR, Shaded JAR or Uber JAR<\/h2>\n<p>CAUTION: DO NOT ENABLE <code>&lt;minimizeJar&gt;true&lt;\/minimizeJar&gt;<\/code> in the <code>maven-shade-plugin<\/code>, it will ruin your day!<\/p>\n<pre class=\"line-numbers\"><code class=\"language-xml\">&lt;!-- in pom.xml --&gt;\n&lt;project&gt;\n  &lt;build&gt;\n    &lt;plugins&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;maven-install-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;2.5.2&lt;\/version&gt;\n        &lt;configuration&gt;\n          &lt;skip&gt;true&lt;\/skip&gt;\n        &lt;\/configuration&gt;\n      &lt;\/plugin&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;maven-shade-plugin&lt;\/artifactId&gt;\n        &lt;version&gt;3.1.0&lt;\/version&gt;\n        &lt;executions&gt;\n          &lt;execution&gt;\n            &lt;phase&gt;install&lt;\/phase&gt;\n            &lt;goals&gt;\n              &lt;goal&gt;shade&lt;\/goal&gt;\n            &lt;\/goals&gt;\n            &lt;configuration&gt;\n              &lt;artifactSet&gt;\n                &lt;excludes&gt;\n                  &lt;exclude&gt;com.apple:AppleJavaExtensions:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;javax.servlet:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.hadoop:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.maven.plugins:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.parquet:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.apache.spark:*&lt;\/exclude&gt;\n                  &lt;exclude&gt;org.scala-lang:*&lt;\/exclude&gt;\n                &lt;\/excludes&gt;\n              &lt;\/artifactSet&gt;\n              &lt;finalName&gt;${project.artifactId}-${project.version}-uber&lt;\/finalName&gt;\n            &lt;\/configuration&gt;\n          &lt;\/execution&gt;\n        &lt;\/executions&gt;\n      &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n  &lt;\/build&gt;\n&lt;\/project&gt;<\/code><\/pre>\n<pre class=\"line-numbers\"><code class=\"language-bash\"># the output jar will be located in \"target\/albedo-1.0.0-SNAPSHOT-uber.jar\"\n$ mvn clean install -DskipTests<\/code><\/pre>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ spark-submit \n--master spark:\/\/localhost:7077 \n--class ws.vinta.albedo.LogisticRegressionRanker \ntarget\/albedo-1.0.0-SNAPSHOT-uber.jar<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"http:\/\/maven.apache.org\/plugins\/maven-shade-plugin\/examples\/includes-excludes.html\">http:\/\/maven.apache.org\/plugins\/maven-shade-plugin\/examples\/includes-excludes.html<\/a><br \/>\n<a href=\"https:\/\/databricks.gitbooks.io\/databricks-spark-knowledge-base\/content\/troubleshooting\/missing_dependencies_in_jar_files.html\">https:\/\/databricks.gitbooks.io\/databricks-spark-knowledge-base\/content\/troubleshooting\/missing_dependencies_in_jar_files.html<\/a><\/p>\n<h2>Run a Spark Application in Local Mode<\/h2>\n<p>Follow &quot;Run &gt; Edit Configurations&quot;:<\/p>\n<ul>\n<li>VM options: <code>-Xms12g -Xmx12g -Dspark.master=&quot;local[*]&quot;<\/code><\/li>\n<li>Before launch:\n<ul>\n<li>Build<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Or<\/p>\n<pre class=\"line-numbers\"><code class=\"language-scala\">\/\/ in YourSparkApp.scala\npackage ws.vinta.albedo\n\nimport org.apache.spark.SparkConf\nimport org.apache.spark.sql.SparkSession\n\nobject YourSparkApp {\n  def main(args: Array[String]): Unit = {\n    val conf = new SparkConf()\n      .setMaster(\"local[*]\")\n      .set(\"spark.driver.memory\", \"12g\")\n\n    val spark = SparkSession\n      .builder()\n      .appName(\"YourSparkApp\")\n      .config(conf)\n      .getOrCreate()\n\n    spark.stop()\n  }\n}<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/github.com\/jaceklaskowski\/mastering-apache-spark-book\/blob\/master\/spark-sparkcontext-creating-instance-internals.adoc\">https:\/\/github.com\/jaceklaskowski\/mastering-apache-spark-book\/blob\/master\/spark-sparkcontext-creating-instance-internals.adoc<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/43054268\/how-to-set-spark-memorystore-size-when-running-in-intellij-scala-console\">https:\/\/stackoverflow.com\/questions\/43054268\/how-to-set-spark-memorystore-size-when-running-in-intellij-scala-console<\/a><\/p>\n<h2>Run a Spark Application in Standalone Mode<\/h2>\n<p>First, start your Spark Standalone cluster:<\/p>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ cd ${SPARK_HOME}\n$ .\/sbin\/start-master.sh -h 0.0.0.0\n$ .\/sbin\/start-slave.sh spark:\/\/localhost:7077\n\n# print logs from Spark master and workers, useful for debugging\n$ tail -f ${SPARK_HOME}\/logs\/*<\/code><\/pre>\n<p>Follow &quot;Run &gt; Edit Configurations&quot;:<\/p>\n<ul>\n<li>VM options: <code>-Dspark.master=spark:\/\/localhost:7077 -Dspark.driver.memory=2g -Dspark.executor.memory=12g -Dspark.executor.cores=3<\/code>\n<ul>\n<li>Local cluster mode: <code>-Dspark.master=&quot;local-cluster[x, y, z]&quot;<\/code> with <code>x<\/code> workers, <code>y<\/code> cores per worker, and <code>z<\/code> MB memory per worker<\/li>\n<li>Local cluster mode doesn't need a real Spark Standalone cluster<\/li>\n<\/ul>\n<\/li>\n<li>Before launch:\n<ul>\n<li>Build<\/li>\n<li>Run Maven Goal 'albedo: clean install'<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Or<\/p>\n<pre class=\"line-numbers\"><code class=\"language-scala\">\/\/ in YourSparkApp.scala\npackage ws.vinta.albedo\n\nimport org.apache.spark.SparkConf\nimport org.apache.spark.sql.SparkSession\n\nobject YourSparkApp {\n  def main(args: Array[String]): Unit = {\n    val conf = new SparkConf()\n      .setMaster(\"spark:\/\/localhost:7077\")\n      .set(\"spark.driver.memory\", \"2g\")\n      .set(\"spark.executor.memory\", \"12g\")\n      .set(\"spark.executor.cores\", \"3\")\n      .setJars(List(\"target\/albedo-1.0.0-SNAPSHOT-uber.jar\"))\n      \/\/ or\n      .setMaster(\"local-cluster[1, 3, 12288]\")\n      .setJars(List(\"target\/albedo-1.0.0-SNAPSHOT-uber.jar\"))\n\n    val spark = SparkSession\n      .builder()\n      .appName(\"YourSparkApp\")\n      .config(conf)\n      .getOrCreate()\n\n    spark.stop()\n  }\n}<\/code><\/pre>\n<p>In the end, there are some glossaries which need to be clarified:<\/p>\n<ul>\n<li>compile: compile a single <em>.java or <\/em>.scala into *.class<\/li>\n<li>make: compile changed files only <\/li>\n<li>build: compile every files in the project<\/li>\n<\/ul>\n<p>ref:<br \/>\n<a href=\"http:\/\/www.jianshu.com\/p\/b4e4658c459c\">http:\/\/www.jianshu.com\/p\/b4e4658c459c<\/a><\/p>\n<h2>Specify a Custom Logging Configuration<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ cd PROJECT_ROOT\n$ cp $SPARK_HOME\/conf\/log4j.properties.template log4j.properties<\/code><\/pre>\n<p>Follow &quot;Run &gt; Edit Configurations&quot;:<\/p>\n<ul>\n<li>VM options: <code>-Dlog4j.configuration=file:.\/log4j.properties<\/code><\/li>\n<\/ul>\n<p>ref:<br \/>\n<a href=\"https:\/\/spark.apache.org\/docs\/latest\/sql-programming-guide.html#getting-started\">https:\/\/spark.apache.org\/docs\/latest\/sql-programming-guide.html#getting-started<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/43054268\/how-to-set-spark-memorystore-size-when-running-in-intellij-scala-console\">https:\/\/stackoverflow.com\/questions\/43054268\/how-to-set-spark-memorystore-size-when-running-in-intellij-scala-console<\/a><br \/>\n<a href=\"https:\/\/community.cloudera.com\/t5\/Advanced-Analytics-Apache-Spark\/Config-log4j-in-Spark\/td-p\/34968\">https:\/\/community.cloudera.com\/t5\/Advanced-Analytics-Apache-Spark\/Config-log4j-in-Spark\/td-p\/34968<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>IntelliJ IDEA supports Scala and Apache Spark perfectly. You're able to browse a complete Spark project built with IntelliJ IDEA on GitHub: https:\/\/github.com\/vinta\/albedo<\/p>\n","protected":false},"author":1,"featured_media":424,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112],"tags":[108,42,109],"class_list":["post-423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-about-big-data","tag-apache-spark","tag-maven","tag-scala"],"_links":{"self":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/comments?post=423"}],"version-history":[{"count":0,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/423\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media\/424"}],"wp:attachment":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media?parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/categories?post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/tags?post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}