Как проверить количество разделов в Spark DataFrame, не неся стоимости .rdd

Самый простой способ добиться того, что вы хотите (где s - ConfigurationBuilder):

s.Global(a => a.UseModules());
s.AddImport("breeze", "breeze-client");

var mySpecialTypes = typeof(IBreezeEntity).Assembly.GetTypes()
    .Where(d => typeof(IBreezeEntity).IsAssignableFrom(d));

foreach (var type in mySpecialTypes)
{
    s.Substitute(type, new RtSimpleTypeName($"I{type.Name} & breeze.Entity"));
}

Reinforced.Typings также сохраняет наследование. Подумайте о том, как получить ваши сущности из общего типа / интерфейса и экспортировать его.

3
задан javadba 19 January 2019 в 20:15
поделиться

2 ответа

По моему опыту df.rdd.getNumPartitions очень быстро, я никогда не сталкивался с тем, чтобы это занимало больше секунды или около того.

Кроме того, вы также можете попробовать

val numPartitions: Long = df
      .select(org.apache.spark.sql.functions.spark_partition_id()).distinct().count()

, что позволит избежать использования .rdd

0
ответ дан Raphael Roth 19 January 2019 в 20:15
поделиться

В rdd.getNumPartitions нет внутренней цены компонента rdd, потому что возвращенный RDD никогда не оценивается.

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

Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.0
      /_/

Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_181)
Type in expressions to have them evaluated.
Type :help for more information.
scala> val ds = spark.read.text("README.md")
ds: org.apache.spark.sql.DataFrame = [value: string]

scala> ds.rdd.getNumPartitions
res0: Int = 1

scala> spark.sparkContext.statusTracker.getJobIdsForGroup(null).isEmpty // Check if there are any known jobs
res1: Boolean = true
[1141 ] этого может быть недостаточно, чтобы убедить вас. Итак, давайте подойдем к этому более систематическим образом:

Обратите внимание, что отмеченные здесь пункты не должны быть экстраполированы на другие приложения из Dataset.rdd. Например, ds.rdd.count было бы действительно дорого и расточительно.

0
ответ дан user10938362 19 January 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: