тут є любителі Скали
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 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)