Size: a a a

2021 October 26

t

tenKe in Data Engineers
ну там ж executeCollect этажом выше
источник

A

Alex in Data Engineers
стоп, мы сейчас говорим про head?
если да, то там действительно есть executeCollect который в свою очередь дёрнет sc.runJob на указанных партициях
источник

A

Alex in Data Engineers
поэтому head и будет тригерить вычисления по всем партициям
источник

t

tenKe in Data Engineers
не, смотри - isEmpty >>

def isEmpty: Boolean = withAction("isEmpty", limit(1).groupBy().count().queryExecution) { plan =>
 plan.executeCollect().head.getLong(0) == 0
}


внутри limit(1) - то что я писал выше и это трансформация, но в итоге он делает executeCollect и чейнит doExecute всех детей до момента создания RDD из источника
источник

A

Alex in Data Engineers
источник

A

Alex in Data Engineers
/**
  * Returns true if the Dataset is empty.
  *
  * @group basic
  * @since 2.4.0
  */
 def isEmpty: Boolean = withAction("isEmpty", select().queryExecution) { plan =>
   plan.executeTake(1).isEmpty
 }
источник

t

tenKe in Data Engineers
а не, я не прав
источник

A

Alex in Data Engineers
вы правы
источник

A

Alex in Data Engineers
ваш код валиден для ветки 2.4
источник

t

tenKe in Data Engineers
а, вы тут про 3 топите?
источник

t

tenKe in Data Engineers
но на самом деле и для 2.4 я чот уже не уверен
источник

A

Alex in Data Engineers
в версии 3.0 уже поменяли
источник

t

tenKe in Data Engineers
protected override def doExecute(): RDD[InternalRow] = child.execute().mapPartitions { iter =>
 iter.take(limit)
}


все партиции посчитает же
источник

A

Alex in Data Engineers
источник

A

Alex in Data Engineers
для 2.4 считает все партиции
для 3.0+ до первой непустой
источник

A

Alex in Data Engineers
источник

t

tenKe in Data Engineers
аа
источник

t

tenKe in Data Engineers
вон оно шо
источник

A

Alex in Data Engineers
ну поломали поведение, с кем не бывает
источник

A

Alex in Data Engineers
вот теперь понял откуда здесь лимит и групбай, а то в коде этого в упор не видел
источник