Size: a a a

2018 December 20

SA

Sultanmurad Abduev in Moscow Spark
from pyspark.sql import functions as F

a = showcase_join_hash.select('union_subject_uuid', F.struct(['name', 'patronymic', 'num', 'id', 'hash']).alias('main_info'))
источник

SA

Sultanmurad Abduev in Moscow Spark
Обычный dataframe
источник

SA

Sultanmurad Abduev in Moscow Spark
6 стб, все строкового типа
источник
2018 December 23

AA

Anton Alekseev in Moscow Spark
Подскажите пожалуйста как задебажить в чем проблема. Есть фрейм DF1 (User, features), на котором провожу группировку по столбцу User, столбец же features аггрегирую в вектор, получим Фрейм RS1. После этого делаю группировку с фреймом DF1 по той же колонке User, но уже аггрегирую в статистики (min, max, skewness и т.д.) после чего VectorAssembler этих статистик в новую колонку features, получаю RS2. Так вот после окончания формирования каждого фрейма я их кэширую и насильно запускаю вычисления через count. Вопрос в результате получаю закешированные посчитанные фреймы RS1 и RS2, но при каждом новом подсчете count RS1 исполняется ms, RS2 же считается 15 секунд. Как задебажить почему такие задержки? В spark UI таска по подсчету каунтов на RS2 занимает пару секунд, но она не появляется в течении секунд 12ти. Тоесть получаем что считается то быстро, но задача долго формируется, подскажите куда заглянуть чтобы понять, почему так долго формируется таска?
источник

AA

Anton Alekseev in Moscow Spark
RS1 num of part = 10, RS2 num of part = 20. coalesce к меньшему числу партиций не приводит к уменьшению времени.
источник

AS

Andrey Smirnov in Moscow Spark
Смотри план, есть мнение что count для датафрейма не всегда будет вызывать вычисления, catalyst может их не форсить
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
Смотри план, есть мнение что count для датафрейма не всегда будет вызывать вычисления, catalyst может их не форсить
Сорри за нубо вопрос, план - это типа dag схема для таски? Граф вычислений?
источник

AS

Andrey Smirnov in Moscow Spark
Да, есть логический план и физический.
источник

AS

Andrey Smirnov in Moscow Spark
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
Да, есть логический план и физический.
Да, физ план даже после кэша с каунтом представляет лупшу из действий (В RS1 пару чтений из памяти). Попробовал как по ссылке что вы скинули, таже петрушка
df.createOrReplaceTempView("df") 
spark.sql("CACHE TABLE df")
df = spark.table("df")
источник

AS

Andrey Smirnov in Moscow Spark
.rdd.count попробуй
источник

AS

Andrey Smirnov in Moscow Spark
Я часто в таких случаях пишу в временную директорию, потом считываю, метод наверное колхозный, но такая линеризация часто помогает
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
.rdd.count попробуй
одна секунда о_О
источник

AA

Anton Alekseev in Moscow Spark
ну тоесть нормально
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
Я часто в таких случаях пишу в временную директорию, потом считываю, метод наверное колхозный, но такая линеризация часто помогает
Ну такой метод примерно описывается по той ссылке что вы дали
источник

AA

Anton Alekseev in Moscow Spark
все понял, щас попробую
источник

AS

Andrey Smirnov in Moscow Spark
Нет, если ты его записал на диск, то count уже не нужен
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
Нет, если ты его записал на диск, то count уже не нужен
ок
источник

AA

Anton Alekseev in Moscow Spark
Andrey Smirnov
Нет, если ты его записал на диск, то count уже не нужен
Странно, пока я не прочитал из сохранённого паркета ничего не менялось.
источник

AA

Anton Alekseev in Moscow Spark
были теже 15 секунд, он хоть и сфлашил на диск, план оставался огромный
источник