Size: a a a

2020 March 18

ПФ

Паша Финкельштейн... in Moscow Spark
В случае case-класса там будет, конечно, написано что-то типа id(), но принципиально это ничего менять не должно
источник

K

KrivdaTheTriewe in Moscow Spark
/** This method has been generated by this script

   (1 to 22).map { x =>
     val anys = (1 to x).map(x => "Any").reduce(_ + ", " + _)
     val childs = (0 to x - 1).map(x => s"val child$x = children($x)").reduce(_ + "\n  " + _)
     val converters = (0 to x - 1).map(x => s"lazy val converter$x = CatalystTypeConverters.createToScalaConverter(child$x.dataType)").reduce(_ + "\n  " + _)
     val evals = (0 to x - 1).map(x => s"converter$x(child$x.eval(input))").reduce(_ + ",\n      " + _)

     s"""case $x =>
     val func = function.asInstanceOf[($anys) => Any]
     $childs
     $converters
     (input: InternalRow) => {
       func(
         $evals)
     }
     """
   }.foreach(println)

 */
источник

ПФ

Паша Финкельштейн... in Moscow Spark
KrivdaTheTriewe
/** This method has been generated by this script

   (1 to 22).map { x =>
     val anys = (1 to x).map(x => "Any").reduce(_ + ", " + _)
     val childs = (0 to x - 1).map(x => s"val child$x = children($x)").reduce(_ + "\n  " + _)
     val converters = (0 to x - 1).map(x => s"lazy val converter$x = CatalystTypeConverters.createToScalaConverter(child$x.dataType)").reduce(_ + "\n  " + _)
     val evals = (0 to x - 1).map(x => s"converter$x(child$x.eval(input))").reduce(_ + ",\n      " + _)

     s"""case $x =>
     val func = function.asInstanceOf[($anys) => Any]
     $childs
     $converters
     (input: InternalRow) => {
       func(
         $evals)
     }
     """
   }.foreach(println)

 */
Я не верю что это кусок кодгена О_о
источник

N

Nikolay in Moscow Spark
В наверное про разное говорим. В самом нижнем consume придет InternalRow
источник

K

KrivdaTheTriewe in Moscow Spark
источник

ПФ

Паша Финкельштейн... in Moscow Spark
Nikolay
В наверное про разное говорим. В самом нижнем consume придет InternalRow
Это понятно, да. Но я говорю именно пр осгенерированной джавовый код, где мы доступаемся к пропертям
источник

K

KrivdaTheTriewe in Moscow Spark
а там дальше
источник

K

KrivdaTheTriewe in Moscow Spark
val udf = ctx.addReferenceObj("udf", function, s"scala.Function${children.length}")
   val getFuncResult = s"$udf.apply(${funcArgs.mkString(", ")})"
   val resultConverter = s"$convertersTerm[${children.length}]"
   val boxedType = CodeGenerator.boxedType(dataType)
   val callFunc =
     s"""
        |$boxedType $resultTerm = null;
        |try {
        |  $resultTerm = ($boxedType)$resultConverter.apply($getFuncResult);
        |} catch (Exception e) {
        |  throw new org.apache.spark.SparkException($errorMsgTerm, e);
        |}
      """.stripMargin
источник

N

Nikolay in Moscow Spark
Давай пройдемся по порядку. Там будет цикл. В цикле к нам придет InternalRow
источник

ПФ

Паша Финкельштейн... in Moscow Spark
Да, уже открыл
источник

K

KrivdaTheTriewe in Moscow Spark
я там случайно оказался
источник

K

KrivdaTheTriewe in Moscow Spark
ребят
источник

N

Nikolay in Moscow Spark
Он уже одно значение internalRow будет конверить
источник

ПФ

Паша Финкельштейн... in Moscow Spark
Nikolay
Давай пройдемся по порядку. Там будет цикл. В цикле к нам придет InternalRow
Я тебе ща в личку закину сгенерированный кусок, чтобы прям со строками можно было говорить
источник

K

KrivdaTheTriewe in Moscow Spark
есть такой код
https://scastie.scala-lang.org/VpW8KVczRei9jQuVXf0Dsw
как бы элегантнее его сделать
чтобы дефаулт велью различных типов можно было привести к null
https://scastie.scala-lang.org/VpW8KVczRei9jQuVXf0Dsw
источник

K

KrivdaTheTriewe in Moscow Spark
Переслано от KrivdaTheTriewe
есть фцункциятипа
def defaultValuesToNull(a:Any) = a  match {
case a:String if a =="" => null
case b:Int if b ==-1 => null
case x => x

}
источник

K

KrivdaTheTriewe in Moscow Spark
Переслано от KrivdaTheTriewe
как ее правильнее в удфку перегнать
источник

K

KrivdaTheTriewe in Moscow Spark
Переслано от KrivdaTheTriewe
две удфки делать под каждый тип или есть хак?
источник

t

tenKe in Moscow Spark
сделай так чтобы она Row принимала
источник

t

tenKe in Moscow Spark
и дальше через Try можно достать либо то либо то
источник