Pyspark coalesce vs coalesce: тайно то же самое или просто неудачное наименование? - PullRequest
0 голосов
/ 26 апреля 2020

Я читаю Spark: полное руководство , и есть кое-что, что я нахожу запутывающим. Функция coalesce определяется несколько раз в разных контекстах. Мне интересно, является ли это той же самой функцией, и я почему-то просто не вижу ссылку, или это просто действительно неудачная проблема с именами.

На странице 80 в главе «Передача и объединение» там написано:

Coalesce [...] не будет выполнять полное перемешивание и попытается объединить разделы.

Насколько я понимаю, эта функция будет объединять разделы до тех пор, пока не будет получено нужное количество разделов, как указано аргументом функции coalesce.

На странице 103 в главе «Объединение» указано:

Spark включает функцию, позволяющую вам выбрать первое ненулевое значение из набора столбцов с помощью функции coalesce.

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

Мои вопросы

  • Is мое понимание этих функций правильное?
  • Как эти функции связаны? Есть ли какая-то ссылка, которую я не вижу?
  • Если нет, то почему у них такое же имя? (Это меня действительно смущает.)

1 Ответ

2 голосов
/ 26 апреля 2020

Ваше понимание верно. Чтобы ответить на вопрос по вашей теме, я бы сказал, что это просто (не очень) неудачное присвоение имени .

coalesce(), поскольку метод RDD или Dataset предназначен для уменьшения количества разделы, как вы заметили. Словарь Google гласит следующее:

собираются вместе, образуя одну массу или целое.

Или (в качестве переходного глагола):

объединить (элементы) в массу или целое.

RDD.coalesce(n) или DataFrame.coalesce(n) использует это последнее значение.

pyspark.sql.functions.coalesce()* Я полагаю, что 1026 * - это собственная реализация Spark общей SQL функции COALESCE, которая реализована во многих системах РСУБД, таких как MS SQL или Oracle. Как вы заметили, эта SQL функция, которую можно вызывать как непосредственно в программном коде, так и в операторах SQL, возвращает первое ненулевое выражение, как и в реализации других дистрибутивов SQL. В этом случае coalesce не одинок. Такие функции, как rtrim, trunc, date_add, все можно найти во многих других дистрибутивах РСУБД и (по крайней мере, насколько я видел) в значительной степени стандартные.

Есть способ интерпретировать «объединить» в его «объединить ...», означая, что это реализация (аргументы объединяются в один, ноль или первый ненулевой )

Другими словами, главная связь между ними является смыслом. Даже если я не очень хорошо знаком с подробностями реализации, я не могу предположить, что между уровнями реализации RDD.coalesce и functions.coalesce существует отношение уровня реализации, как, например, между RDD.coalesce и DataFrame.coalesce.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...