malyj_gorgan: (Default)
malyj_gorgan ([personal profile] malyj_gorgan) wrote2023-12-02 05:21 pm
Entry tags:

тут є любителі Скали

По роботі, через примху начальства, доводиться переписувати пару шматків коду з SQL на Скалу, тої Скали не знаючи зовсім. Але потрошки, потрошки... Проблема в тому, що це для внутрішнього нашого датастора, там компіляція/перевірка на помилки триває хвилину, а запуск найтривіальнішого коду займає хвилин 5-10, тому все помаленько дуже. Але, 80% уже готово...
...І раптом вперся в помилку, яку уже дві години не можу виправити. З того всього виглядає, що в dataframe.column.when() немає логічного "OR". Воно тупо ламається на значку "||"


Якщо це не баг, а фіча, поясніть мені, тупому, кому така фіча могла прийти в голову. І, основне, НАФІГА?

P.S. Цікаво, скільки з тих, хто користується Скалою, знає безсмертні рядки про
Лупайте сю скалу! Нехай ні жар, ні холод
Не спинять вас. Зносіть і труд, і спрагу, й голод
Бо вам призначено скалу сесю розбить.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2023-12-03 01:58 am (UTC)(link)

Не, ну надо различать скалу и всякие библиотеки, от самых дебильных до самых продвинутых. Большой разброс. 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.

juan_gandhi: (Default)

[personal profile] juan_gandhi 2023-12-03 10:24 am (UTC)(link)

I see. Shit happens. "Immutable rules" may be a big problem, but that's life.

[personal profile] abalaeff 2023-12-03 03:37 am (UTC)(link)
А які рядки знають, а Скалу ні, ті вважаються? 😁
Edited 2023-12-03 03:42 (UTC)

[personal profile] abalaeff 2023-12-03 03:57 am (UTC)(link)
Ось саме то й хотів спитати 😁 А потім вирішив вгадати. Не вгадав 🤣 Дякую, й лупай її, Росте, хай вона лусне вщент.
Edited 2023-12-03 03:58 (UTC)

[personal profile] sassa_nf 2023-12-03 07:38 am (UTC)(link)
It would help if you could mention imports (so it would be possible to search for docs) and example line of code. Looking for dataframe Spark docs pop up. They don't have .column or .when().

[personal profile] sassa_nf 2023-12-03 07:05 pm (UTC)(link)
Ні, org.apache - це опенсорс

[personal profile] sassa_nf 2023-12-03 07:18 pm (UTC)(link)
Ok, I don't see dataframe.column in the docs, so it can't be helped.

But it looks like it is a Java library natively accessed from scala, so I wouldn't expect || to be defined for it.

[personal profile] sassa_nf 2023-12-04 06:26 pm (UTC)(link)
є, але то ж для булєвих виразів, а не SQL на різних конструкціях.

[personal profile] sassa_nf 2023-12-04 07:13 pm (UTC)(link)
Ну, я мав на увазі, що dataframe.column.when() має бути якимось об'єктом. На скалі об'єкти можуть мати свої "оператори" (насправді методи, але виглядають як оператори), наприклад ||, тому я й хотів глянути, що в документації про це. А там нічого такого якраз і не визначено.

[personal profile] ichthuss 2023-12-05 01:03 am (UTC)(link)
Є:
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").
Edited 2023-12-05 01:04 (UTC)

[personal profile] ichthuss 2023-12-05 08:22 pm (UTC)(link)
З мого не дуже широкого досвіду, через хитровивернутий type inferring скала може видавати досить загадкові повідомлення про помилки в доволі простих випадках замість банального "type mismatch". Тоді допомагає явно розписати складний вираз зі вказанням всіх проміжних типів, приблизно так - замість
expr.when(A || B,...
написати:
val a: Column = A
val b: Column = B
val a_p_b: Column = a || b
expr.when(a_p_b,...
Тоді помилка найчастіше все одно вилізає, але уже з притомним поясненням.

[personal profile] ichthuss 2023-12-06 08:01 am (UTC)(link)
Ото підозрюю, що це саме blah.blah.blah було не Column, а мав бути Column. Можливо навіть, що достатньо було б поміняти операнди місцями (якщо другий з них таки був Column).

[personal profile] sassa_nf 2023-12-05 09:06 pm (UTC)(link)
А! Справді! Дякую

[personal profile] ichthuss 2023-12-03 09:59 pm (UTC)(link)
Якщо я правильно пам'ятаю, то в Скалі || (і інші) - це просто назва функції, а "x || y" є красивим записом "x.||(y)". Тому особисто я б спробував викликати логічне or як функцію (а документація підказує, що зветься вона
public static Column bool_or(Column e)
)

[personal profile] ichthuss 2023-12-04 03:09 pm (UTC)(link)
Ні, я мав на увазі when(A.bool_or(B), Y1).otherwise(Y2).

Я майже впевнений, що якщо працюють інші логічні оператори, то і or можна змусити запрацювати в нормальному вигляді. Але це треба поекспериментувати, щоб з'ясувати, чого воно точно хоче і в якому вигляді; і при локальному сетапі це було б зовсім нескладно, а якщо треба сабмітити на гальмівний сайт - то це займе багатенько часу, і питання - чи варто?
zhiva: (Default)

[personal profile] zhiva 2023-12-04 09:39 am (UTC)(link)
а як виглядає ваш виклик when? бо я тут трохи пошукала про scala spark or conditions in when, і наче люди таке успішно роблять.

[personal profile] ichthuss 2023-12-05 12:55 am (UTC)(link)
А якого типу тут boolean_statement? Я до чого: в скалівських DSL завжди треба танцювати від типів даних.
Edited 2023-12-05 00:55 (UTC)
timelets: (Default)

Off topic

[personal profile] timelets 2023-12-31 05:26 pm (UTC)(link)
Can you do me a favor and reply to this guy that the bet is still on. I'm banned in yakov's LJ and can't do it myself.
https://yakov-a-jerkov.livejournal.com/2117488.html

He should contact me here on DW.

Thank you and Happy New Year!
timelets: (Default)

Re: Off topic

[personal profile] timelets 2023-12-31 08:42 pm (UTC)(link)
Sorry, I posted a wrong link. I meant this guy pmbbmw here:

https://yakov-a-jerkov.livejournal.com/2117488.html?thread=86881392#t86881392

Thanks.
timelets: (Default)

Re: Off topic

[personal profile] timelets 2024-01-02 03:36 am (UTC)(link)
Thanks.