Вопрос о методе подсчета в наборе искровых данных? - PullRequest
1 голос
/ 27 июня 2019

Я читал книгу «Руководство по определению искр». У нее есть пример, подобный приведенному ниже.

val myRange = spark.range(1000).toDF("number")
val divisBy2 = myRange.where("number % 2 = 0")
divisBy2.count()

Ниже приведено описание трех строк кода.

we started a Spark job that runs our filter transformation (a narrow
transformation), then an aggregation (a wide transformation) that performs the counts on a per
partition basis, and then a collect, which brings our result to a native object in the respective
language

Iзнаю, что счет является действием , а не преобразованием , так как он возвращает фактическое значение, и я не могу вызвать ' объяснение ' для возвращаемого значения счетчика.

Но мне было интересно, почему подсчет вызовет широкое преобразование, как я могу узнать план выполнения этого count в этом случае, поскольку я не могу вызвать объяснение после count

Спасибо.

обновлено: enter image description here

Это изображение - скриншот spark ui, я беру его из блокнота данных, я сказал, что есть перемешиваниеоперация записи и чтения, означает ли это, что существует широкое преобразование?

1 Ответ

0 голосов
/ 27 июня 2019

Вот план выполнения:

== Physical Plan ==
*(2) HashAggregate(keys=[], functions=[count(1)], output=[count#7L])
+- Exchange SinglePartition
   +- *(1) HashAggregate(keys=[], functions=[partial_count(1)], output=[count#10L])
      +- *(1) Project
         +- *(1) Filter ((id#0L % 2) = 0)
            +- *(1) Range (0, 1000, step=1, splits=8)

Что мы можем увидеть здесь:

  1. Подсчет производится внутри каждого раздела
  2. Все разделы объединены в одинодин
  3. Окончательный подсчет
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...