Size: a a a

2021 October 18

A

Alex in Moscow Spark
cleanedSource это то что сгенерировалось

оно сразу локально на драйвере тестируется компиляция
потом уже на воркеры уходит
источник

ПФ

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

ПФ

Паша Финкельштейн... in Moscow Spark
Про кодогенерацию в спарке
источник

NN

No Name in Moscow Spark
Вот это круть)
источник

GP

Grigory Pomadchin in Moscow Spark
а покажи где уходит на воркеры
источник

A

Alex in Moscow Spark
опять же
я говорю только про WholeStageCodegen

про другие фильтры и тд которые кодоген поддерживают нужно смотреть
источник

ПФ

Паша Финкельштейн... in Moscow Spark
+
источник

A

Alex in Moscow Spark
rdds.head.mapPartitionsWithIndex { (index, iter) =>
val
(clazz, _) = CodeGenerator.compile(cleanedSource)
 
val buffer = clazz.generate(references).asInstanceOf[BufferedRowIterator]
 buffer
.init(index, Array(iter))
 
new Iterator[InternalRow] {
   
override def hasNext: Boolean = {
     
val v = buffer.hasNext
     if
(!v) durationMs += buffer.durationMs()
     v
   }
   
override def next: InternalRow = buffer.next()
 }
}


или у нас уже mapMaptitions перестали выполняться на воркерах?
источник

A

Alex in Moscow Spark
в частности строковая переменная cleanedSource
источник

GP

Grigory Pomadchin in Moscow Spark
ну так да код но код выгребается из кеша и елси его нету он генерится
источник

GP

Grigory Pomadchin in Moscow Spark
паша ж выше кидал линку
источник

ПФ

Паша Финкельштейн... in Moscow Spark
не, подожди, мне казалось что как раз вот это ничего не раскидывает, а генерит локально
источник

A

Alex in Moscow Spark
cleanedSource генерится на драйвере
дальше раскидывается по воркерам
там он попадает в кеш компилятора
источник

A

Alex in Moscow Spark
посмотри где она создаётся
источник

GP

Grigory Pomadchin in Moscow Spark
а ну все понял
источник

GP

Grigory Pomadchin in Moscow Spark
она вне рдд
источник

A

Alex in Moscow Spark
да
источник

GP

Grigory Pomadchin in Moscow Spark
а потом каждый ехекутор компилит dds.head.mapPartitionsWithIndex { (index, iter) =>
       val (clazz, _) = CodeGenerator.compile(cleanedSource)
источник

GP

Grigory Pomadchin in Moscow Spark
понятно
источник

A

Alex in Moscow Spark
поэтому я и говорил что сразу проходит на драйвере, а потом на каждом екзекуторе компиляция повторяется
но сорс генерится 1 раз
источник