Hi everyone Thanks Takeshi. I run into the same issue as Mark for my row to case class converter:
def rowToCaseClass[C <: Product : TypeTag](r: Row)(implicit encs: (ExpressionEncoder[Row], ExpressionEncoder[C])): C = { val ir = encs._1.toRow(r) encs._2.fromRow(ir) } So in Spark3.0 I would do: def rowToCaseClass[C <: Product : TypeTag](r: Row)(implicit enc: ExpressionEncoder[C]): C = enc.createDeserializer()(InternalRow(r)) Unfortunately this yields the following error below when calling val r: Row = Row(1.0,2000L) case class C(d: Double, l: Long) implicit val enc: ExpressionEncoder[C] = Encoders.product[C].asInstanceOf[ExpressionEncoder[C]].resolveAndBind() rowToCaseClass[C](r) Cheers, Robert Caused by: java.lang.RuntimeException: Error while decoding: java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRow cannot be cast to java.lang.Double newInstance(class line58c8cc5e7d9841e5b85d34e76c692e7d31.$read$$iw$$iw$$iw$$iw$$iw$$iw$C) at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$Deserializer.apply(ExpressionEncoder.scala:201) at io.beprop.spark.common.package$.rowToCaseClass(package.scala:132) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>( command-503321:1) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw$$iw$$iw$$iw$$iw.<init>( command-503321:50) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw$$iw$$iw$$iw.<init>( command-503321:52) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw$$iw$$iw.<init>( command-503321:54) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw$$iw.<init>( command-503321:56) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$$iw.<init>(command-503321:58) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read.<init>(command-503321:60) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$.<init>(command-503321:64) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$read$.<clinit>(command-503321) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$eval$.$print$lzycompute(<notebook>:7) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$eval$.$print(<notebook>:6) at line58c8cc5e7d9841e5b85d34e76c692e7d35.$eval.$print(<notebook>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:745) at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1021) at scala.tools.nsc.interpreter.IMain.$anonfun$interpret$1(IMain.scala:574) at scala.reflect.internal.util.ScalaClassLoader.asContext(ScalaClassLoader.scala:41) at scala.reflect.internal.util.ScalaClassLoader.asContext$(ScalaClassLoader.scala:37) at scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:41) at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:573) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:600) at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:570) at com.databricks.backend.daemon.driver.DriverILoop.execute(DriverILoop.scala:219) at com.databricks.backend.daemon.driver.ScalaDriverLocal.$anonfun$repl$1(ScalaDriverLocal.scala:204) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at com.databricks.backend.daemon.driver.DriverLocal$TrapExitInternal$.trapExit(DriverLocal.scala:769) at com.databricks.backend.daemon.driver.DriverLocal$TrapExit$.apply(DriverLocal.scala:722) at com.databricks.backend.daemon.driver.ScalaDriverLocal.repl(ScalaDriverLocal.scala:204) at com.databricks.backend.daemon.driver.DriverLocal.$anonfun$execute$10(DriverLocal.scala:431) at com.databricks.logging.UsageLogging.$anonfun$withAttributionContext$1(UsageLogging.scala:237) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62) at com.databricks.logging.UsageLogging.withAttributionContext(UsageLogging.scala:232) at com.databricks.logging.UsageLogging.withAttributionContext$(UsageLogging.scala:229) at com.databricks.backend.daemon.driver.DriverLocal.withAttributionContext(DriverLocal.scala:48) at com.databricks.logging.UsageLogging.withAttributionTags(UsageLogging.scala:274) at com.databricks.logging.UsageLogging.withAttributionTags$(UsageLogging.scala:267) at com.databricks.backend.daemon.driver.DriverLocal.withAttributionTags(DriverLocal.scala:48) at com.databricks.backend.daemon.driver.DriverLocal.execute(DriverLocal.scala:408) at com.databricks.backend.daemon.driver.DriverWrapper.$anonfun$tryExecutingCommand$1(DriverWrapper.scala:653) at scala.util.Try$.apply(Try.scala:213) at com.databricks.backend.daemon.driver.DriverWrapper.tryExecutingCommand(DriverWrapper.scala:645) at com.databricks.backend.daemon.driver.DriverWrapper.getCommandOutputAndError(DriverWrapper.scala:486) at com.databricks.backend.daemon.driver.DriverWrapper.executeCommand(DriverWrapper.scala:598) at com.databricks.backend.daemon.driver.DriverWrapper.runInnerLoop(DriverWrapper.scala:391) at com.databricks.backend.daemon.driver.DriverWrapper.runInner(DriverWrapper.scala:337) at com.databricks.backend.daemon.driver.DriverWrapper.run(DriverWrapper.scala:219) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRow cannot be cast to java.lang.Double at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:116) at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow.getDouble(rows.scala:44) at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow.getDouble$(rows.scala:44) at org.apache.spark.sql.catalyst.expressions.GenericInternalRow.getDouble(rows.scala:195) Am Mo., 24. Aug. 2020 um 03:05 Uhr schrieb Takeshi Yamamuro < linguin....@gmail.com>: > Hi, > > Have you tried it like this? > > ------ > { r: InternalRow => enc1.fromRow(r) } > > ===> > > { r: InternalRow => > val fromRow = enc1.createDeserializer() > fromRow(r) > } > > > https://github.com/apache/spark/commit/e7fef70fbbea08a38316abdaa9445123bb8c39e2 > > Bests, > Takeshi > > On Thu, Aug 20, 2020 at 1:52 PM Mark Hamilton > <marha...@microsoft.com.invalid> wrote: > >> Dear Spark Developers, >> >> >> >> In our teams Spark Library <http://aka.ms/mmlspark> we utilize >> ExpressionEncoders to help us automatically generate spark SQL types from >> scala case classes. >> >> >> >> >> https://github.com/Azure/mmlspark/blob/master/src/main/scala/com/microsoft/ml/spark/core/schema/SparkBindings.scala >> >> >> >> However it seems in 3.0 the ability to get types from internal rows and >> rows has been removed. Is there any guidance on how to get similar behavior >> in 3.0? Thanks for your help! >> >> >> >> Best, >> >> Mark >> > > > -- > --- > Takeshi Yamamuro >