title: Why is the error "Unable to find encoder for type stored in a Dataset" when encoding JSON using case classes?
body: <p>I've written spark job:</p>
  
  <pre><code>object SimpleApp {
    def main(args: Array[String]) {
      val conf = new SparkConf().setAppName("Simple Application").setMaster("local")
      val sc = new SparkContext(conf)
      val ctx = new org.apache.spark.sql.SQLContext(sc)
      import ctx.implicits._
  
      case class Person(age: Long, city: String, id: String, lname: String, name: String, sex: String)
      case class Person2(name: String, age: Long, city: String)
  
      val persons = ctx.read.json("/tmp/persons.json").as[Person]
      persons.printSchema()
    }
  }
  </code></pre>
  
  <p>In IDE when I run the main function, 2 error occurs:</p>
  
  <pre><code>Error:(15, 67) Unable to find encoder for type stored in a Dataset.  Primitive types (Int, String, etc) and Product types (case classes) are supported by importing sqlContext.implicits._  Support for serializing other types will be added in future releases.
      val persons = ctx.read.json("/tmp/persons.json").as[Person]
                                                                    ^
  
  Error:(15, 67) not enough arguments for method as: (implicit evidence$1: org.apache.spark.sql.Encoder[Person])org.apache.spark.sql.Dataset[Person].
  Unspecified value parameter evidence$1.
      val persons = ctx.read.json("/tmp/persons.json").as[Person]
                                                                    ^
  </code></pre>
  
  <p>but in Spark Shell I can run this job without any error. what is the problem?</p>