malyj_gorgan (
malyj_gorgan) wrote2023-12-02 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
Не, ну надо различать скалу и всякие библиотеки, от самых дебильных до самых продвинутых. Большой разброс. 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
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
I see. Shit happens. "Immutable rules" may be a big problem, but that's life.
no subject
no subject
Тому рахуються, так :) Правда, можливо не поділяють моєї емоції до цієї мови з такою гарною назвою.
(Пішов далі лупати сю скалу)
no subject
no subject
no subject
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.{col, expr, lit, when, sum, avg, count}
У мене лише оце зараз з'явилося запитання: оце "орг" на початку може бути саме нашим внутрішнім ?
no subject
no subject
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
no subject
no subject
> ... на різних конструкціях....
Оскільки Скала позиціонується як найкраще знаряддя для роботи з великими даними, то основний формат табличних даних -- не просто якась собі різна конструкція, а чи не основна.
no subject
no subject
І про це і кажу: коли визначали оператори (хай вони і є насправді методами) для об'єкту dataframe.column.when , то хтось там зробив ментальне зусилля, щоби не дай бог не визначити логічне "або". Це як би хтось робив калькулятор без кнопки "помножити". Все інше є, а множення нема, бо нафіга воно вам, ось експонента, логарифм і додавання, чого вам ще треба. Ніби, і правда, можна без нього, але навіщо.
Якби ще вони йшли шляхом мінімізації операндів, то я б зрозумів, але нє, з колонкою в формагі часу/дати, можна робити і plusDays(), і minusDays(), бо написати plusDays(-2) у них рука відсохне. А визначити "||" - нє, навіщо, і так добре...
no subject
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
Точно, є. З прикладом для filter()
А у when() не працює (ну я ж не придумав, що у мене код ламався на цьому кілька разів.
Вже не знаю, чи то помилка в чомусь локальному, чи в чомусь глобальному :(
no subject
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
Але дідько з ним, я вже давно написав інакше і забув :)
Ще раз дякую за пояснення
no subject
no subject
Зате ще раз повторюся: дякую!
no subject
no subject
no subject
when(condition, Y1).otherwise(Y2).
Відповідно, якщо мій condition можна записати як А or B, то можна все разом переписати як
when(А, Y1).otherwise(when(B, Y1).otherwise(Y2)).
Але це не відміняє мого потання "нафіга?" Якщо вже є більш-менш стандартна для різних мов булева алгебра, то чого її калічити, змушуючи людей писати досить банальні для інших мов умови набагато більш громіздким способом? Навіть в кожному першому варіанті SQL'а воно є...
Відповідно, таке враження, що операнд or не включений паралельно з and і not навмисно. Значить хтось мав якісь аргументи для того, щоби цього не робити. Я і бідкаюся, що не можу собі уявити таких аргументів.
no subject
Я майже впевнений, що якщо працюють інші логічні оператори, то і or можна змусити запрацювати в нормальному вигляді. Але це треба поекспериментувати, щоб з'ясувати, чого воно точно хоче і в якому вигляді; і при локальному сетапі це було б зовсім нескладно, а якщо треба сабмітити на гальмівний сайт - то це займе багатенько часу, і питання - чи варто?
no subject
Десь так я само я і вирішив: зробив як-небудь, шоб не падало, і чорт з ним.
Але радості від цього я відчувати не буду
no subject
no subject
dataframe.withColumn("column_name", when(boolean_statement, answer_if_true).otherwise(answer_if_false))
no subject
no subject
Отого типу, який DataFrame.column, яко не заглиблюватися :)
Off topic
https://yakov-a-jerkov.livejournal.com/2117488.html
He should contact me here on DW.
Thank you and Happy New Year!
Re: Off topic
"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
https://yakov-a-jerkov.livejournal.com/2117488.html?thread=86881392#t86881392
Thanks.
Re: Off topic
Re: Off topic