Конфигурация для задания искры для записи файла 3000000 в качестве вывода

Я должен сгенерировать 3000000 файлов в качестве результата задания искры.

У меня есть два входных файла:

File 1 -> Size=3.3 Compressed, No.Of Records=13979835
File 2 -> Size=1.g Compressed, No.Of Records=6170229

Spark Job делает следующее:

  1. чтение этого файла и объединение их на основе общего столбца1. -> DataFrame-A
  2. Результат группировки DataFrame-A на основе одного столбца2 -> DataFrame-B
  3. Из DataFrame-B используется array_join для агрегированного столбца и отделяется этот столбец символом '\n'. -> DataFrame-C
  4. Запись результата разделения DataFrame-C по столбцу2.

    val DF1 = sparkSession.read.json("FILE1") //    |ID     |isHighway|isRamp|pvId      |linkIdx|ffs |length            |
    val DF12 = sparkSession.read.json("FILE2") //    |lId    |pid       |
    
    val joinExpression = DF1.col("pvId") === DF2.col("lId")
    val DFA = DF.join(tpLinkDF, joinExpression, "inner").select(col("ID").as("SCAR"), col("lId"), col("length"), col("ffs"), col("ar"), col("pid")).orderBy("linkIdx")
    val DFB = DFA.select(col("SCAR"),concat_ws(",", col("lId"), col("length"),col("ffs"), col("ar"), col("pid")).as("links")).groupBy("SCAR").agg(collect_list("links").as("links"))
    
    val DFC = DFB.select(col("SCAR"), array_join(col("links"), "\n").as("links"))
    DFC.write.format("com.databricks.spark.csv").option("quote", "\u0000").partitionBy("SCAR").mode(SaveMode.Append).format("csv").save("/tmp")
    

Я должен сгенерировать 3000000 файлов в качестве результата задания искры.

Почему это необходимо? Проблема с маленькими файлами.

thebluephantom 06.04.2019 08:43

это своего рода требование, когда другой системе необходимо прочитать эти небольшие файлы (не все, но по мере поступления запроса для этого файла каждый файл содержит некоторый идентификатор в имени файла, поэтому запрос с этим идентификатором для этого полученного файла система должна прочитать этот файл) и дать результат в реальном времени в течение 45 сек.

Vipul khalasi 06.04.2019 10:05

Звучит как катастрофа, если честно.

thebluephantom 06.04.2019 14:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После запуска некоторого теста у меня появилась идея запустить это задание в пакетном режиме, например:

  • запрос startIdx: 0, endIndex: 100000
  • запрос startIdx: 100000, endIndex: 200000
  • запрос startIdx: 200000, endIndex: 300000

и так.... до

  • запрос startIdx: 2900000, endIndex: 3000000

Другие вопросы по теме