искра избегать собирать как можно больше - PullRequest
1 голос
/ 13 июля 2020

Я видел, что общая рекомендация для всех, кто использует Spark (в моем случае с Scala), - избегать любых действий, которые передают все данные от исполнителей к драйверу (сбор, подсчет, сумма и т. Д. c). Однако, когда я попытался использовать Spark statisti c library http://spark.apache.org/docs/2.2.0/ml-statistics.html, я обнаружил, что корреляционная матрица и методы ChiSquareTest ожидают в качестве своих параметров массив или матрицу, полученную из array \ seq, поэтому я не вижу как я мог бы избежать сбора данных в фрейме данных (и еще некоторых манипуляций, которые, как я предполагаю, сделают его типом Vectors not Row), если я хочу использовать эти функции. Буду признателен за любую помощь.

1 Ответ

1 голос
/ 13 июля 2020
  1. В вашем примере и Correlation.corr, и ChiSquareTest.test принимают фрейм данных, поэтому вам не нужно собирать данные перед их передачей этим функциям. Результаты этих функций вам нужно будет собрать в драйвере, но это не должно вызвать каких-либо проблем, поскольку выходной размер должен быть намного меньше, чем исходный набор данных, и он должен легко помещаться в память драйвера.
  2. На ваш вопрос в комментарии про groupBy / joins - они «дорогие», но по другой причине. Группировка и объединение приводят к перетасовке данных, поэтому вашим работникам потребуется отправлять много данных по сети, что занимает гораздо больше времени, чем локальная обработка данных. Хотя, тем не менее, если вам нужно это сделать - это нормально, просто помните о последствиях для производительности. Метод
  3. collect не рекомендуется использовать для полного набора данных, так как это может привести к Ошибка OOM в драйвере (представьте, что у вас есть набор данных 50 ГБ, распределенный по кластеру, и теперь вы собираете его на одном узле), но если вы уже обработали свои данные и знаете, что там будет быть разумным количеством строк - это довольно безопасно. count не должно быть проблемой с точки зрения памяти, поскольку он просто возвращает количество строк в вашем наборе данных, вместо того, чтобы отправлять их все на узел драйвера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...