тут є любителі Скали
Dec. 2nd, 2023 05:21 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
По роботі, через примху начальства, доводиться переписувати пару шматків коду з SQL на Скалу, тої Скали не знаючи зовсім. Але потрошки, потрошки... Проблема в тому, що це для внутрішнього нашого датастора, там компіляція/перевірка на помилки триває хвилину, а запуск найтривіальнішого коду займає хвилин 5-10, тому все помаленько дуже. Але, 80% уже готово...
...І раптом вперся в помилку, яку уже дві години не можу виправити. З того всього виглядає, що в dataframe.column.when() немає логічного "OR". Воно тупо ламається на значку "||"
Якщо це не баг, а фіча, поясніть мені, тупому, кому така фіча могла прийти в голову. І, основне, НАФІГА?
P.S. Цікаво, скільки з тих, хто користується Скалою, знає безсмертні рядки про
Лупайте сю скалу! Нехай ні жар, ні холод
Не спинять вас. Зносіть і труд, і спрагу, й голод
Бо вам призначено скалу сесю розбить.
...І раптом вперся в помилку, яку уже дві години не можу виправити. З того всього виглядає, що в dataframe.column.when() немає логічного "OR". Воно тупо ламається на значку "||"
Якщо це не баг, а фіча, поясніть мені, тупому, кому така фіча могла прийти в голову. І, основне, НАФІГА?
P.S. Цікаво, скільки з тих, хто користується Скалою, знає безсмертні рядки про
Лупайте сю скалу! Нехай ні жар, ні холод
Не спинять вас. Зносіть і труд, і спрагу, й голод
Бо вам призначено скалу сесю розбить.
no subject
Date: 2023-12-03 01:58 am (UTC)Не, ну надо различать скалу и всякие библиотеки, от самых дебильных до самых продвинутых. Большой разброс. 5-10 хвилин - это точно как-то многовато. Я такое видел в одной дебильной конторе, в их дебильной джаве, когда одну и ту же апликацию инициализировали шесть раз за каким-то хреном... man, can we switch to English to discuss the problem? I'm really clueless about how to talk about all this in Russian or Ukrainian.
no subject
Date: 2023-12-03 03:08 am (UTC)Scala here is one of the "allowed" languages (the other two being spark sql and pyspark) to access a big and ugly data warehouse. Really big and really-really ugly. One of the components of that ugliness is that you don't have a proper sandbox (unless you fully set one up yourself, which is beyond what I know how to do and care to do right), and accessing the actual warehouse can be done via big web-UI thing that start the batch job. Basically, they put you in a sequence of queues: first, some container job checks your dependencies, then, some other job looks for your permissions, then you actually wait for a cluster, competing with thousands if not tens of thousands of ongoing jobs... Hence the 5-10 mins -- that's what you get when trying to run stuff with lowest resource demand but without setting run priorities reserved for, well, high priority jobs.
Guess, that's the flip side of being a big company -- people have set rules that became immutable. At least, at my current employer's the most important skill here is knowing how to navigate constraints that are specific to this company and don't exist elsewhere. I once worked with a DS formerly from Facebook -- same thing, he seemed to be good at stuff that mattered at FB but didn't matter elsewhere.
no subject
Date: 2023-12-03 10:24 am (UTC)I see. Shit happens. "Immutable rules" may be a big problem, but that's life.
no subject
Date: 2023-12-03 03:37 am (UTC)no subject
Date: 2023-12-03 03:43 am (UTC)Тому рахуються, так :) Правда, можливо не поділяють моєї емоції до цієї мови з такою гарною назвою.
(Пішов далі лупати сю скалу)
no subject
Date: 2023-12-03 03:57 am (UTC)no subject
Date: 2023-12-03 07:38 am (UTC)no subject
Date: 2023-12-03 05:37 pm (UTC)import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.{col, expr, lit, when, sum, avg, count}
У мене лише оце зараз з'явилося запитання: оце "орг" на початку може бути саме нашим внутрішнім ?
no subject
Date: 2023-12-03 07:05 pm (UTC)no subject
Date: 2023-12-03 07:18 pm (UTC)But it looks like it is a Java library natively accessed from scala, so I wouldn't expect || to be defined for it.
no subject
Date: 2023-12-03 11:58 pm (UTC)no subject
Date: 2023-12-04 06:26 pm (UTC)no subject
Date: 2023-12-04 07:07 pm (UTC)> ... на різних конструкціях....
Оскільки Скала позиціонується як найкраще знаряддя для роботи з великими даними, то основний формат табличних даних -- не просто якась собі різна конструкція, а чи не основна.
no subject
Date: 2023-12-04 07:13 pm (UTC)no subject
Date: 2023-12-04 08:35 pm (UTC)І про це і кажу: коли визначали оператори (хай вони і є насправді методами) для об'єкту dataframe.column.when , то хтось там зробив ментальне зусилля, щоби не дай бог не визначити логічне "або". Це як би хтось робив калькулятор без кнопки "помножити". Все інше є, а множення нема, бо нафіга воно вам, ось експонента, логарифм і додавання, чого вам ще треба. Ніби, і правда, можна без нього, але навіщо.
Якби ще вони йшли шляхом мінімізації операндів, то я б зрозумів, але нє, з колонкою в формагі часу/дати, можна робити і plusDays(), і minusDays(), бо написати plusDays(-2) у них рука відсохне. А визначити "||" - нє, навіщо, і так добре...
no subject
Date: 2023-12-05 01:03 am (UTC)https://spark.apache.org/docs/latest/api/scala/org/apache/spark/sql/Column.html#||(other:Any):org.apache.spark.sql.Column (якщо анхор не працює, шукати за строкою "def ||(other: Any): Column").
no subject
Date: 2023-12-05 03:55 pm (UTC)Точно, є. З прикладом для filter()
А у when() не працює (ну я ж не придумав, що у мене код ламався на цьому кілька разів.
Вже не знаю, чи то помилка в чомусь локальному, чи в чомусь глобальному :(
no subject
Date: 2023-12-05 08:22 pm (UTC)expr.when(A || B,...
написати:
val a: Column = A
val b: Column = B
val a_p_b: Column = a || b
expr.when(a_p_b,...
Тоді помилка найчастіше все одно вилізає, але уже з притомним поясненням.
no subject
Date: 2023-12-05 11:04 pm (UTC)Але дідько з ним, я вже давно написав інакше і забув :)
Ще раз дякую за пояснення
no subject
Date: 2023-12-06 08:01 am (UTC)no subject
Date: 2023-12-06 05:16 pm (UTC)Зате ще раз повторюся: дякую!
no subject
Date: 2023-12-05 09:06 pm (UTC)no subject
Date: 2023-12-03 09:59 pm (UTC)no subject
Date: 2023-12-03 11:57 pm (UTC)when(condition, Y1).otherwise(Y2).
Відповідно, якщо мій condition можна записати як А or B, то можна все разом переписати як
when(А, Y1).otherwise(when(B, Y1).otherwise(Y2)).
Але це не відміняє мого потання "нафіга?" Якщо вже є більш-менш стандартна для різних мов булева алгебра, то чого її калічити, змушуючи людей писати досить банальні для інших мов умови набагато більш громіздким способом? Навіть в кожному першому варіанті SQL'а воно є...
Відповідно, таке враження, що операнд or не включений паралельно з and і not навмисно. Значить хтось мав якісь аргументи для того, щоби цього не робити. Я і бідкаюся, що не можу собі уявити таких аргументів.
no subject
Date: 2023-12-04 03:09 pm (UTC)Я майже впевнений, що якщо працюють інші логічні оператори, то і or можна змусити запрацювати в нормальному вигляді. Але це треба поекспериментувати, щоб з'ясувати, чого воно точно хоче і в якому вигляді; і при локальному сетапі це було б зовсім нескладно, а якщо треба сабмітити на гальмівний сайт - то це займе багатенько часу, і питання - чи варто?
no subject
Date: 2023-12-04 05:23 pm (UTC)Десь так я само я і вирішив: зробив як-небудь, шоб не падало, і чорт з ним.
Але радості від цього я відчувати не буду
no subject
Date: 2023-12-04 09:39 am (UTC)no subject
Date: 2023-12-04 05:24 pm (UTC)dataframe.withColumn("column_name", when(boolean_statement, answer_if_true).otherwise(answer_if_false))
no subject
Date: 2023-12-05 12:55 am (UTC)no subject
Date: 2023-12-05 03:40 pm (UTC)Отого типу, який DataFrame.column, яко не заглиблюватися :)
Off topic
Date: 2023-12-31 05:26 pm (UTC)https://yakov-a-jerkov.livejournal.com/2117488.html
He should contact me here on DW.
Thank you and Happy New Year!
Re: Off topic
Date: 2023-12-31 06:14 pm (UTC)"this guys" being Yakov? What do you mean by "reply" then? Reply to smth in that post from mid-summer?
Or did you mean some specific thread/comment, just didn't link to it?
Thank you for the NY wishes, same to you
Re: Off topic
Date: 2023-12-31 08:42 pm (UTC)https://yakov-a-jerkov.livejournal.com/2117488.html?thread=86881392#t86881392
Thanks.
Re: Off topic
Date: 2024-01-01 01:45 am (UTC)Re: Off topic
Date: 2024-01-02 03:36 am (UTC)