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. >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> >