Size: a a a

Scala User Group

2020 November 13

K

KrivdaTheTriewe in Scala User Group
implicit def caseClassConvertable[A <: Product: ClassTag: TypeTag, B <: Product: ClassTag: TypeTag] = new Convertable[A,B] {
     override def convertSource(df:DataFrame,convert: A => Option[B])(implicit sparkSession: SparkSession): DataFrame =  {
       import sparkSession.implicits._
       df.as[A].flatMap(convert)).toDF()
     }
   }
 }
источник

K

KrivdaTheTriewe in Scala User Group
ну такой пример был
источник

Oℕ

Oleg ℕizhnik in Scala User Group
очень красивый шейплес и ноль рефлексии, уважаю
источник

GP

Grigory Pomadchin in Scala User Group
KrivdaTheTriewe
implicit def caseClassConvertable[A <: Product: ClassTag: TypeTag, B <: Product: ClassTag: TypeTag] = new Convertable[A,B] {
     override def convertSource(df:DataFrame,convert: A => Option[B])(implicit sparkSession: SparkSession): DataFrame =  {
       import sparkSession.implicits._
       df.as[A].flatMap(convert)).toDF()
     }
   }
 }
эт рифлексия
источник

GP

Grigory Pomadchin in Scala User Group
хз где у тебя в ванилоспарке шаплез юзается там 0 мест
источник

K

KrivdaTheTriewe in Scala User Group
Grigory Pomadchin
эт рифлексия
оно падает в компайл тайме, если кодек вывести не может
источник

GP

Grigory Pomadchin in Scala User Group
KrivdaTheTriewe
оно падает в компайл тайме, если кодек вывести не может
да, покажи пример ошибки
источник

K

KrivdaTheTriewe in Scala User Group
Grigory Pomadchin
да, покажи пример ошибки
я полез смотреть, там рефлексия, действительно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
KrivdaTheTriewe
abstract class ConfiguredSparkApp[Config <: (Serializable with Product)] {
 implicit def hint: ProductHint[Config] = ProductHint[Config](ConfigFieldMapping(CamelCase, CamelCase))
 implicit val reader = deriveReader[Config]
 def job(config: Config): ZIO[JobStarter.baseEnv, Throwable, Unit]
 final def main(args: Array[String]): Unit = {
   val configParser = new JobConfig[Config]
   JobStarter.run[Config](configParser.parseArgs(args))(job)
 }
}
class CSA[Cfg](implicit reader: ConfigReader[Cfg])

trait Shit

implicit def hintShit[C <: Shit] : ProductHint[C] = ...

case class ShittyConfig(...) extends Shit


object KruwdaApp extends CSA[ShittyConfig](deriveConfig)
источник

K

KrivdaTheTriewe in Scala User Group
KrivdaTheTriewe
я полез смотреть, там рефлексия, действительно
источник

K

KrivdaTheTriewe in Scala User Group
Oleg ℕizhnik
class CSA[Cfg](implicit reader: ConfigReader[Cfg])

trait Shit

implicit def hintShit[C <: Shit] : ProductHint[C] = ...

case class ShittyConfig(...) extends Shit


object KruwdaApp extends CSA[ShittyConfig](deriveConfig)
и как это поможет вывести?
источник

GP

Grigory Pomadchin in Scala User Group
падает в компайл тайме когда тайптега нет для T; хороший кодек очень.
источник

K

KrivdaTheTriewe in Scala User Group
Grigory Pomadchin
падает в компайл тайме когда тайптега нет для T; хороший кодек очень.
я уже сказал, что ошибся, прости
источник

ZM

ZLoyer Matveev in Scala User Group
KrivdaTheTriewe
оно падает в компайл тайме, если кодек вывести не может
падало бы в рантайме, но не доживает))
источник

Oℕ

Oleg ℕizhnik in Scala User Group
KrivdaTheTriewe
и как это поможет вывести?
когда ты выводишь уже полностью тип знаешь,
а хинт можно глобально задать для всех, отмеченных тег трейтом
источник

K

KrivdaTheTriewe in Scala User Group
Oleg ℕizhnik
когда ты выводишь уже полностью тип знаешь,
а хинт можно глобально задать для всех, отмеченных тег трейтом
да, вот это спасибо
источник

K

KrivdaTheTriewe in Scala User Group
мне кажется я понял
источник

Oℕ

Oleg ℕizhnik in Scala User Group
можно деревом выводить кодек, я вообще не понимаю, почему не деревом
источник

R

RAFIZ in Scala User Group
Oleg ℕizhnik
Просто уже устал от этих людей из питерского квадратика, которые приходят и доказывают, что без теорката нельзя в ФП
а на самом деле можно?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
тогда руками в компаньон ничего не нужно писать
источник