Size: a a a

2020 December 03

MV

Mitya Volodin in Moscow Spark
Сюткин
И почем этот парсер обошёлся?))
Дорого. А главное неэффективно )))
Да нет, если без шуток - парсеры кода надо искать не под спарк, а под язык.

И уже писать свои дополнения в виде конечного автомата, который будет токены уже обрабатывать.
источник

ED

Evgenij Danilov in Moscow Spark
Не хочу писать руками 😭
источник

MV

Mitya Volodin in Moscow Spark
Главное, что даже если найдёте готовый, он вас скорей всего всё равно не устроит.
источник

ED

Evgenij Danilov in Moscow Spark
Mitya Volodin
Главное, что даже если найдёте готовый, он вас скорей всего всё равно не устроит.
Это так, но доработать готовое решение мне видится более простым путём.
источник

С

Сюткин in Moscow Spark
Evgenij Danilov
Не хочу писать руками 😭
А почему не хочешь?

Интересная задача
источник

ED

Evgenij Danilov in Moscow Spark
Потому, что надо быстро 🙂
источник

M

Mi in Moscow Spark
Evgenij Danilov
Это так, но доработать готовое решение мне видится более простым путём.
Вот не сказал бы, вы пока поймёте где можно "встроиться", так проще своё написать с готового джава парсера
источник

M

Mi in Moscow Spark
Ещё сильно зависит от сложности Спарк джобы
источник

M

Mi in Moscow Spark
Но задача в целом не то чтобы тривиальная, обратная задача выглядела бы куда проще
источник

ED

Evgenij Danilov in Moscow Spark
Mi
Вот не сказал бы, вы пока поймёте где можно "встроиться", так проще своё написать с готового джава парсера
Просто когда я представляю поток багов при первом запуске, мне становится грустно.
источник

M

Mi in Moscow Spark
А вообще может просто прогнать через тот же Спарк этот код и из метаданных уже вытянуть что-то более готовое
источник

M

Mi in Moscow Spark
Не знаю возможно ли вообще так
источник

M

Mi in Moscow Spark
Но вдруг
источник
2020 December 04

ИК

Иван Калининский... in Moscow Spark
Всем привет!

Я написал простенький партишенер:

class MyPartitioner(n: Int) extends Partitioner {
 override def numPartitions: Int = n
 override def getPartition(key: Any): Int = key.asInstanceOf[Row].getAs[Int](PartField)
}

И так же просто его вызываю:

def repartition(df: DataFrame, n: Int)(implicit spark: SparkSession): DataFrame = {
 val partitionedRDD = df
   .rdd
   
.map(row => (row, ()))
   .partitionBy(new MyPartitioner(n))
   .map(_._1)
 spark.createDataFrame(partitionedRDD, df.schema)
   .drop(PartField)
}
//Поменял вызов .partitionBy()

Поле PartField с типом Int уже добавлено в датафрейм, и представляет собой точный номер партиции RDD. Эта фигня обеспечивает нужное разделение по партициям и конечным файлам, но работает примерно в два раза медленнее, чем простой df.repartition(n, col(PartField)). Но repartition работает по вычисленному Murmur3 (коллизии!) и в один файл уходит несколько партиций. Повышать n пробовал (это был предыдущий подход, уже больше года работает), но коллизии все равно возможны, и много пустых тасков не добавляет элегантности.

Отсюда два вопроса:
1. Что я делаю не так?
2. Как можно сделать чтобы Partitioner работал в два раза быстрее или DataFrame.repartition брал значение поля, не вычисляя хеш? С расширениями SparkSession могу повозиться, если есть какой-нибудь наводящий ресурс
источник
2020 December 06

ПФ

Паша Финкельштейн... in Moscow Spark
Переслано от Паша Финкельштейн...
Народ, нам очень не хватает трёх экспертов на смартдату - на три доклада. С нас билет на неё. задаче эксперта - задавать вопросы из чата и от себя и подстраховать разговором с ведущим если спикер почему-то выпадет из эфира. Супер-профессионалом быть не обязательно
источник

K

KrivdaTheTriewe in Moscow Spark
источник
2020 December 07

SM

Sergey M in Moscow Spark
Guys
Я как-то яростно туплю
Никак не могу вспомнить как написать что-то типо
df.where(pkBroadcastedArray.value.contains($"pk"))

т.е. взять из df только те записи чьи pk содержатся в array который broadcasted

наверно это как-то через udf можно сделать,
но я что-то забыл как просунуть column в udf
не подскажете?
источник

AA

Aleksandr Aleksandro... in Moscow Spark
Sergey M
Guys
Я как-то яростно туплю
Никак не могу вспомнить как написать что-то типо
df.where(pkBroadcastedArray.value.contains($"pk"))

т.е. взять из df только те записи чьи pk содержатся в array который broadcasted

наверно это как-то через udf можно сделать,
но я что-то забыл как просунуть column в udf
не подскажете?
Можно попробовать просто через $"pk".isin(...)
источник

SM

Sergey M in Moscow Spark
O
Спс
Хотя бы не выделяет красным)
источник
2020 December 09

PK

Pavel Klemenkov in Moscow Spark
источник