Size: a a a

Scala User Group

2020 December 10

ИК

Иван Калининский... in Scala User Group
Пока оставляю решение с переменной, указывающей на удаление, но на мой взгляд, оно как-то не очень хорошо выглядит, и полагается на строгий порядок обхода элементов в .map

https://scastie.scala-lang.org/UBKUjMZoRKqeUhUZ1AXNWw

И иногда вылетает в тестах (160 итераторов по 800 элементов), но тут может быть проблема в подготовке тестовых данных, а тащить это в scastie как-то неудобно, никто и не посмотрит, наверное
источник
2020 December 11

ИК

Иван Калининский... in Scala User Group
Спойлер: нашел баг в подготовке данных, необходимо поправить, но не сейчас
источник

R

RAFIZ in Scala User Group
Всем привет
не знаете, в akka-http-testkit нет механизма тестирования параметров из query string?
источник

БЁ

Борщевик Ёбаный... in Scala User Group
Igal Tabachnik
Если там ultimate edition идеи - можно попрофилировать (там в help есть меню диагностики). Но там уже хз...
Ага, только при ZLayer.fromServices взрывается
Насмерть
источник

E

Elijah in Scala User Group
Иван Калининский
Коллеги, подскажите!
Задача такая - отфильтровать итератор, лучше всего за один проход, алгоритм вполне понятен: встречаю ноль в первой позиции тюпла - удаляю эту и следующую строки.

Вот как я собрался это делать:
https://scastie.scala-lang.org/z3mZ9rjuSyOXnRdImZUz8Q

Но не получается, очевидно, что строки не удаляются, очевидно, потому что не вызывается hasNext(). For comprehensions не могу корректно описать, алгоритм с мутабельными переменными тоже не взлетел.
я сделал вот так, но для этого поменял итератор на вектор. если это критично, то думаю стоит поискать какое-то другое решение

https://scastie.scala-lang.org/hawWBD1gT3GRlRFZzoQa1A
источник

E

Elijah in Scala User Group
вроде даже получилось в один проход
источник

ИК

Иван Калининский... in Scala User Group
Elijah
я сделал вот так, но для этого поменял итератор на вектор. если это критично, то думаю стоит поискать какое-то другое решение

https://scastie.scala-lang.org/hawWBD1gT3GRlRFZzoQa1A
Спасибо! Действительно хорошо, и в цикле и без дополнительных затрат, практически.
Тут надо понять вот что: общий объем данных, которые пойдут на вход, может достигать двух терабайт и больше, что довольно много, поэтому использовать структуру, которая должна находиться в памяти полностью - довольно дорого. Я попробую бенчмаркнуть использование Vector, и может быть, подставить вместо него Stream. Сам алгоритм, на мой взгляд, очень элегантный и идиоматичный
источник

S

Saitama in Scala User Group
Elijah
я сделал вот так, но для этого поменял итератор на вектор. если это критично, то думаю стоит поискать какое-то другое решение

https://scastie.scala-lang.org/hawWBD1gT3GRlRFZzoQa1A
Можно заменить хранение prev на булевский флаг
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Иван Калининский
Коллеги, подскажите!
Задача такая - отфильтровать итератор, лучше всего за один проход, алгоритм вполне понятен: встречаю ноль в первой позиции тюпла - удаляю эту и следующую строки.

Вот как я собрался это делать:
https://scastie.scala-lang.org/z3mZ9rjuSyOXnRdImZUz8Q

Но не получается, очевидно, что строки не удаляются, очевидно, потому что не вызывается hasNext(). For comprehensions не могу корректно описать, алгоритм с мутабельными переменными тоже не взлетел.
что должно быть если два нуля подряд? игнорировать второй ноль, как у вас?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Иван Калининский
Коллеги, подскажите!
Задача такая - отфильтровать итератор, лучше всего за один проход, алгоритм вполне понятен: встречаю ноль в первой позиции тюпла - удаляю эту и следующую строки.

Вот как я собрался это делать:
https://scastie.scala-lang.org/z3mZ9rjuSyOXnRdImZUz8Q

Но не получается, очевидно, что строки не удаляются, очевидно, потому что не вызывается hasNext(). For comprehensions не могу корректно описать, алгоритм с мутабельными переменными тоже не взлетел.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Без игнорирования второго нуля
https://scastie.scala-lang.org/Odomontois/119xxFQQRNOtzezpP0gD1w/1
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Иван Калининский
Спасибо! Действительно хорошо, и в цикле и без дополнительных затрат, практически.
Тут надо понять вот что: общий объем данных, которые пойдут на вход, может достигать двух терабайт и больше, что довольно много, поэтому использовать структуру, которая должна находиться в памяти полностью - довольно дорого. Я попробую бенчмаркнуть использование Vector, и может быть, подставить вместо него Stream. Сам алгоритм, на мой взгляд, очень элегантный и идиоматичный
Вы можете воспользоваться таким же подходом для решений с O(1)  памяти, используя Stream
https://scastie.scala-lang.org/Odomontois/119xxFQQRNOtzezpP0gD1w/8
источник

ИК

Иван Калининский... in Scala User Group
Oleg ℕizhnik
Вы можете воспользоваться таким же подходом для решений с O(1)  памяти, используя Stream
https://scastie.scala-lang.org/Odomontois/119xxFQQRNOtzezpP0gD1w/8
Большое спасибо, это действительно то, что нужно, задачу можно считать решённой
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну смотрите
источник

Oℕ

Oleg ℕizhnik in Scala User Group
скан-лефт можно и прямо в рдд воткнуть
источник

ИК

Иван Калининский... in Scala User Group
переход к rdd вызывает серьезное падение перфоманса, поэтому стараюсь держаться в контексте DataFrame и использовать .mapPartitions
источник

VM

V. M. in Scala User Group
Иван Калининский
переход к rdd вызывает серьезное падение перфоманса, поэтому стараюсь держаться в контексте DataFrame и использовать .mapPartitions
это странно потому что преобразования итератор=>итератор одни из самых легковесных
источник

ИК

Иван Калининский... in Scala User Group
V. M.
это странно потому что преобразования итератор=>итератор одни из самых легковесных
нет, не iterator=>iterator, сама смена контекста df.rdd; spark.createDataFrame(newRdd, df.schema)
источник

ИК

Иван Калининский... in Scala User Group
Возможно, Catalyst и Tungsten всё же не зря сделаны, есть определенные оптимизации и кодогенерация под капотом
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Иван Калининский
переход к rdd вызывает серьезное падение перфоманса, поэтому стараюсь держаться в контексте DataFrame и использовать .mapPartitions
Ну это решение не будет работать. если 0 будет в самом конце партишена
источник