By the way, the limitation of case classes to 22 parameters was removed in <https://issues.scala-lang.org/browse/SI-7296> Scala 2.11 <https://issues.scala-lang.org/browse/SI-7098> (there's some technical rough edge <https://github.com/scala/scala/pull/2305> past 22 that you most likely will never run into, but past 255, you run into underlying limitations of the JVM <https://issues.scala-lang.org/browse/SI-7324>).
Best, Patrick On Thu, Feb 26, 2015 at 11:58 AM, anamika gupta <anamika.guo...@gmail.com> wrote: > Hi Patrick > > Thanks a ton for your in-depth answer. The compilation error is now > resolved. > > Thanks a lot again !! > > On Thu, Feb 26, 2015 at 2:40 PM, Patrick Varilly < > patrick.vari...@dataminded.be> wrote: > >> Hi, Akhil, >> >> In your definition of sdp_d >> <http://stackoverflow.com/questions/28689186/facing-error-while-extending-scala-class-with-product-interface-to-overcome-limi>, >> all your fields are of type Option[X]. In Scala, a value of type Option[X] >> can hold one of two things: >> >> 1. None >> 2. Some(x), where x is of type X >> >> So to fix your immediate problem, wrap all your parameters to the sdp_d >> constructor in Some(...), as follows: >> >> new sdp_d(Some(r(0).trim.toInt), Some(r(1).trim.toInt), >> Some(r(2).trim), ... >> >> Your earlier question of why writing sdp_d(...) for a case class works >> but you need to write new sdp_d(...) for an explicit class, there's a >> simple answer. When you create a case class X in scala, Scala also makes a >> companion object X behind the scenes with an apply method that calls new >> (see below). Scala's rules will call this apply method automatically. So, >> when you write "X(...)", you're really calling "X.apply(...)" which in turn >> calls "new X(...)". (This is the same trick behind writing things like >> List(1,2,3)) If you don't use a case class, you'd have to make the >> companion object yourself explicitly. >> >> For reference, this statement: >> >> case class X(a: A, b: B) >> >> is conceptually equivalent to >> >> class X(val a: A, val b: B) extends ... { >> >> override def toString: String = // Auto-generated >> override def hashCode: Int = // Auto-generated >> override def equals(that: Any): Boolean = // Auto-generated >> >> ... more convenience methods ... >> } >> >> object X { >> def apply(a: A, b: B) = new X(a, b) >> ... more convenience methods ... >> } >> >> If you want to peek under the hood, try compiling a simple X.scala file >> with the line "case class X(a: Int, b: Double)", then taking apart the >> generated X.class and X$.class (e.g., "javap X.class"). >> >> More info here >> <http://docs.scala-lang.org/tutorials/tour/case-classes.html>, here >> <http://www.scala-lang.org/docu/files/ScalaReference.pdf> and in Programming >> in Scala <http://www.artima.com/shop/programming_in_scala_2ed> ch 15. >> >> Hope that helps! >> >> Best, >> >> Patrick >> >> On Thu, Feb 26, 2015 at 6:37 AM, anamika gupta <anamika.guo...@gmail.com> >> wrote: >> >>> I am now getting the following error. I cross-checked my types and >>> corrected three of them i.e. r26-->String, r27-->Timestamp, >>> r28-->Timestamp. This error still persists. >>> >>> scala> >>> sc.textFile("/home/cdhuser/Desktop/Sdp_d.csv").map(_.split(",")).map { r => >>> | val upto_time = sdf.parse(r(23).trim); >>> | calendar.setTime(upto_time); >>> | val r23 = new java.sql.Timestamp(upto_time.getTime) >>> | val insert_time = sdf.parse(r(27).trim) >>> | calendar.setTime(insert_time) >>> | val r27 = new java.sql.Timestamp(insert_time.getTime) >>> | val last_upd_time = sdf.parse(r(28).trim) >>> | calendar.setTime(last_upd_time) >>> | val r28 = new java.sql.Timestamp(last_upd_time.getTime) >>> | new sdp_d(r(0).trim.toInt, r(1).trim.toInt, r(2).trim, >>> r(3).trim.toInt, r(4).trim.toInt, r(5).trim, r(6).trim.toInt, r(7).trim, >>> r(8).trim.toDouble, r(9).trim.toDouble, r(10).trim, r(11).trim, r(12).trim, >>> r(13).trim, r(14).trim, r(15).trim, r(16).trim, r(17).trim, r(18).trim, >>> r(19).trim, r(20).trim, r(21).trim.toInt, r(22).trim, r23, r(24).trim, >>> r(25).trim, r(26).trim, r27, r28) >>> | }.registerAsTable("sdp_d") >>> >>> <console>:26: error: type mismatch; >>> found : Int >>> required: Option[Int] >>> new sdp_d(r(0).trim.toInt, r(1).trim.toInt, r(2).trim, >>> r(3).trim.toInt, r(4).trim.toInt, r(5).trim, r(6).trim.toInt, r(7).trim, >>> r(8).trim.toDouble, r(9).trim.toDouble, r(10).trim, r(11).trim, r(12).trim, >>> r(13).trim, r(14).trim, r(15).trim, r(16).trim, r(17).trim, r(18).trim, >>> r(19).trim, r(20).trim, r(21).trim.toInt, r(22).trim, r23, r(24).trim, >>> r(25).trim, r(26).trim, r27, r28) >>> >>> On Wed, Feb 25, 2015 at 2:32 PM, Akhil Das <ak...@sigmoidanalytics.com> >>> wrote: >>> >>>> It says sdp_d not found, since it is a class you need to instantiate it >>>> once. like: >>>> >>>> sc.textFile("derby.log").map(_.split(",")).map( r => { >>>> val upto_time = sdf.parse(r(23).trim); >>>> calendar.setTime(upto_time); >>>> val r23 = new java.sql.Timestamp(upto_time.getTime); >>>> >>>> val insert_time = sdf.parse(r(26).trim); >>>> calendar.setTime(insert_time); >>>> val r26 = new java.sql.Timestamp(insert_time.getTime); >>>> >>>> val last_upd_time = sdf.parse(r(27).trim); >>>> calendar.setTime(last_upd_time); >>>> val r27 = new java.sql.Timestamp(last_upd_time.getTime); >>>> >>>> *new* *sdp_d(r(0).trim.toInt, r(1).trim.toInt, r(2).trim, >>>> r(3).trim.toInt, r(4).trim.toInt, r(5).trim, r(6).trim.toInt, r(7).trim, >>>> r(8).trim.toDouble, r(9).trim.toDouble, r(10).trim, r(11).trim, r(12).trim, >>>> r(13).trim, r(14).trim, r(15).trim, r(16).trim, r(17).trim, r(18).trim, >>>> r(19).trim, r(20).trim, r(21).trim.toInt, r(22).trim, r23, r(24).trim, >>>> r(25).trim, r26, r27, r(28).trim)* >>>> }).registerAsTable("sdp") >>>> >>>> Thanks >>>> Best Regards >>>> >>>> On Wed, Feb 25, 2015 at 2:14 PM, anamika gupta < >>>> anamika.guo...@gmail.com> wrote: >>>> >>>>> The link has proved helpful. I have been able to load data, register >>>>> it as a table and perform simple queries. Thanks Akhil !! >>>>> >>>>> Though, I still look forward to knowing where I was going wrong with >>>>> my previous technique of extending the Product Interface to overcome case >>>>> class's limit of 22 fields. >>>>> >>>>> On Wed, Feb 25, 2015 at 9:45 AM, anamika gupta < >>>>> anamika.guo...@gmail.com> wrote: >>>>> >>>>>> Hi Akhil >>>>>> >>>>>> I guess it skipped my attention. I would definitely give it a try. >>>>>> >>>>>> While I would still like to know what is the issue with the way I >>>>>> have created schema? >>>>>> >>>>>> On Tue, Feb 24, 2015 at 4:35 PM, Akhil Das < >>>>>> ak...@sigmoidanalytics.com> wrote: >>>>>> >>>>>>> Did you happen to have a look at >>>>>>> https://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema >>>>>>> >>>>>>> Thanks >>>>>>> Best Regards >>>>>>> >>>>>>> On Tue, Feb 24, 2015 at 3:39 PM, anu <anamika.guo...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> My issue is posted here on stack-overflow. What am I doing wrong >>>>>>>> here? >>>>>>>> >>>>>>>> >>>>>>>> http://stackoverflow.com/questions/28689186/facing-error-while-extending-scala-class-with-product-interface-to-overcome-limi >>>>>>>> >>>>>>>> ------------------------------ >>>>>>>> View this message in context: Facing error while extending scala >>>>>>>> class with Product interface to overcome limit of 22 fields in >>>>>>>> spark-shell >>>>>>>> <http://apache-spark-user-list.1001560.n3.nabble.com/Facing-error-while-extending-scala-class-with-Product-interface-to-overcome-limit-of-22-fields-in-spl-tp21787.html> >>>>>>>> Sent from the Apache Spark User List mailing list archive >>>>>>>> <http://apache-spark-user-list.1001560.n3.nabble.com/> at >>>>>>>> Nabble.com. >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >