Поиск…


Вступление

Цель этой темы заключается в том, чтобы документировать лучшие практики при задании вопросов, связанных с Apache Spark.

Информация об окружающей среде:

При задании вопросов, связанных с Apache Spark, пожалуйста, укажите следующую информацию

  • Версия Apache Spark, используемая клиентом и развертывание Spark, если это применимо. Для вопросов, связанных с API, основные (1.6, 2.0, 2.1 и т. Д.), Как правило, достаточны, поскольку вопросы, касающиеся возможных ошибок, всегда используют полную информацию о версии.
  • Версия Scala используется для создания двоичных файлов Spark.
  • Версия JDK ( java -version ).
  • Если вы используете гостевой язык (Python, R), пожалуйста, предоставьте информацию о языковой версии. В Python используйте теги: , или более конкретные, чтобы различать языковые варианты.
  • Построить определение ( build.sbt , pom.xml ), если это применимо, или внешние версии зависимостей (Python, R), когда это применимо.
  • Менеджер кластеров ( local[n] , Spark standalone, Yarn, Mesos), режим ( client , cluster ) и другие параметры отправки, если это применимо.

Примеры данных и кода

Примеры данных

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

При необходимости всегда включайте информацию о типе:

  • В API на основе RDD используйте аннотации типа типа, когда это необходимо.
  • В API, основанный на DataFrame, предоставляется информация о схеме как StrucType или вывод из Dataset.printSchema .

Результат из Dataset.show или print может выглядеть хорошо, но не говорит нам ничего о базовых типах.

Если конкретная проблема возникает только в масштабе, используйте генераторы случайных данных (Spark предоставляет некоторые полезные утилиты в org.apache.spark.mllib.random.RandomRDDs и org.apache.spark.graphx.util.GraphGenerators

Код

Пожалуйста, используйте аннотации типов, когда это возможно. Хотя ваш компилятор может легко отслеживать типы, это не так просто для простых смертных. Например:

val lines: RDD[String] = rdd.map(someFunction)

или же

def f(x: String): Int = ???

лучше, чем:

val lines = rdd.map(someFunction)

а также

def f(x: String) = ???

соответственно.

Диагностическая информация

Отладка вопросов.

Когда вопрос связан с отладкой конкретного исключения, всегда предоставляйте соответствующую трассировку. Хотя рекомендуется удалять дублированные выходы (от разных исполнителей или попыток), не вырезать трассировки только для одной строки или класса исключения.

Вопросы производительности.

В зависимости от контекста попробуйте предоставить такие детали, как:

  • RDD.debugString / Dataset.explain .
  • Вывод из Spark UI с диаграммой DAG, если применимо в конкретном случае.
  • Соответствующие сообщения журнала.
  • Диагностическая информация, собранная внешними инструментами (Ganglia, VisualVM).

Прежде чем спросить



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow