Получение количества строк в кадре данных Spark без подсчета - PullRequest
1 голос
/ 17 мая 2019

Я применяю много преобразований к Spark DataFrame (filter, groupBy, join).Я хочу иметь количество строк в DataFrame после каждого преобразования.

В настоящее время я подсчитываю количество строк, используя функцию count () после каждого преобразования, но это вызывает действие каждый раз, которое на самом деле не соответствует действительности.оптимизирован.

Мне было интересно, есть ли способ узнать количество строк без необходимости инициировать другое действие, отличное от исходного задания.

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Каждый оператор сам по себе имеет пару метрик.Эти метрики видны в пользовательском интерфейсе spark, вкладке SQL.

Если SQL не используется, мы можем проанализировать объект выполнения запроса фрейма данных после выполнения, чтобы получить доступ к метрикам (внутренним аккумуляторам).) .

Пример: df.queryExecution.executedPlan.metrics даст метрики самого верхнего узла в DAG.

1 голос
/ 17 мая 2019

Вы можете использовать аккумулятор для каждого этапа и увеличивать аккумулятор на карте после каждого этапа. Затем, в конце, после того, как вы выполните свое действие, у вас будет счет для всех этапов.

val filterCounter = spark.sparkContext.longAccumulator("filter-counter")
val groupByCounter = spark.sparkContext.longAccumulator("group-counter")
val joinCounter = spark.sparkContext.longAccumulator("join-counter")

myDataFrame
    .filter(col("x") === lit(3))
    .map(x => {
      filterCounter.add(1)
      x
    })        .groupBy(col("x"))
    .agg(max("y"))
    .map(x => {
      groupByCounter.add(1)
      x
    })
    .join(myOtherDataframe, col("x") === col("y"))
    .map(x => {
      joinCounter.add(1)
      x
    })
    .count()

print(s"count for filter = ${filterCounter.value}")
print(s"count for group by = ${groupByCounter.value}")
print(s"count for join = ${joinCounter.value}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...