I was experimenting with the new Scala 3 macro syntax and getting errors even though my code was clearly correct:

val msg = Expr("Hello")
val printHello = '{ print($msg) }
println(printHello.show) // print("Hello")

I soon figured out that the Scala version in my Spark sbt project was 2.12.17 - so version 2. Looking at the Spark compatibility matrix I saw that Spark doesn’t support Scala 3 yet!

This is a known issue, but someone already found a workaround using .map(_.cross(CrossVersion.for3Use2_13)) in my build.sbt file:

nvsvlaecai.mralb""meslrooaiasarrp:oVprgg(=neay.._rrDaa.":skeppcs=iVpaarpoeeccoa"nrnhhsr0sdeesk.:ie..(-1=onssCl"ncppre"iaaoa3=errsr.skksn3"""Vi.4en3.+%%rg"0=%%s".i0S""o"essnqpp.(aafrrokkr--3UcsUsoqserlee"2l"_a%1t%3es)ssp)tpaarSrkpkVaVererkrssivioeonrns,ion

Datasets

Upgrading to Scala 3 lead to the following error:

[[[eeerrrrrrooorrr]]]40Unvaablleiotto_dfsin=dseinlcvoedre_rdff.oars[tIyOpTeDastpaaTrykpleesa]rning.IOTDataTypes.AnimplicitEncoder[sparklearning.IOTDataTypes]isneededtostoresparklearning.IOTDataTypesinstancesinaDataset.Primitivetypes(Int,String,etc)andProducttypes(caseclasses)aresupportedbyimportingspark.implicits._Supportforserializingothertypeswillbeaddedinfuturereleases..

This could be solved by adding the following dependency in my build.sbt file:

"org.scala-lang"%%"scala3-library"%scalaVersion.value

I updated my datasets.scala code as follows:

case class Usage(uid: Int, user: String, usage: Int)
case class UsageCost(uid: Int, user: String, usage: Int, cost: Double)

// Correct way to create TypeTags in Scala 3
import scala.reflect.runtime.universe._

implicit val usageTypeTag: TypeTag[Usage] = typeTag[Usage]
implicit val usageCostTypeTag: TypeTag[UsageCost] = typeTag[UsageCost]

// Create explicit encoders (these should work now with TypeTags)
implicit val usageEncoder: Encoder[Usage] = Encoders.product[Usage]
implicit val usageCostEncoder: Encoder[UsageCost] = Encoders.product[UsageCost]

The code now compiles but I’m encountering an error:

ECxacuespetdiobnaaaaaaaaaaaaaaaaaayaaatttttttttttttttttt:tttinsjjjjssssssssssjjjjoospaaaabbbbbbbccbaaaarrp1tavvvvtttttttaatvvvvgga8hraaaa.......ll.aaaa..rrk....RRRRRDDaai....aakmelbbbbuuuuuee..nbbblpploaeaaaannnnnffrutaaaaaaerdassss...$.aautesssnccaereeeeie$.ruunireeeghhr"n////nxaeulltln///.eensijjjjvenxntti.ajjjN..ibndddaocoeWssmTlaaaussntgkkkvkunci$$er.vvvlppg-....aetfut...yBaaalaa.bDiii.Meuth$$j$a...PrrDgannnla$neLaaa.cuulokka-ttttai1$Sonnvakttai..ttaeeenn(ruaooapgiinnssahsrrrg(Rucdnn8prllgtqqsrennn.Runceff.lo...elleetaaarunWeruuJyuccTr..taslllen.is(nnF(noohEcEsd....f.stsR$$uTdnnrxan$smrrrlsch(ubtnrTccectc.-aeeeecaLRngecyhuuaeao<5ifffcalou.Rrt.rrrdpldc"nllltlaansumiserr.tyel(eee.a:d.cnWocaeerisrijdcccM:8esaTrnadnnuotsnaattte15rclaa0lPttnn.$ivt...t3)$aasp$ao..(:S.taaNNDh55l:kpm:oTTTcp>.saaeo)(a1$ec2lhhhCar(lettldR:16rV1$rrralodatiie.u12($$3Beeenadansvvgin7)D2s)aaaanRutg.eean.8e(pcdddoeca.sMMtvs)fD.kPP.tftsEceeiocaeagoojl(exattnkaufprooaieEtclhhgellapollvncnseaooM(atuluEEavtc.p)ddeM:slynxx:oiostAAte1.t(dee8kodciccht1ssJRcc4eneaoccoh2c.Fuuu0$rlneedo)asuntt)".saIssAdlcnnoose.:nssc.aacarrcns2Ioocj:ltb.$acc5nrrea2ailrWloa)iIIsv0:oeuoadltmmsa92n.nr.eaippo:100rWkrr:allr5)3$uoeeF3l..I60mnrrfo1iiim9)c(k.lr9znnp)VDere()evvl$erucSroo.sf(ntcEkkipaT(.areen.uhTalr0(vjlrhpao(NoateriRrNakvBae.eateaadaTfti(:cPdylivD2koPpevee3gooeceMl)rloTteeoElaiMtguxEgoehanexsntotdce$.hdiJucTsoAnotuycdcgbotpa)cMSroeleee.rTastrj.a:shvajg2ooiva.3rdcavi6IAe:an)mc.1:(pcs16slec33c.sa65ajsl))laoaavr:.aI3r:m7e7p8f7l)l).ejcatv.aa:p4i3.)Mirror)"becausethereturnvalueof"scala.reflect.api.TypeTags.typeTag(scala.reflect.api.TypeTags$TypeTag)"isnull