Как использовать Spark SQL в многопоточной среде с Spring и RabbitMQ? - PullRequest
1 голос
/ 28 октября 2019

Я унаследовал код Java, который использует Spark для обработки XML. Он не делает с этим ничего особенного, он просто загружает XML и создает набор данных из тегов, необходимых для обработки.

Проблема в том, что код, который запускает сеанс Spark, загружает файл и создает набор данных, работает в потоке очереди потребителя Spring RabbitMQ. Каждый раз, когда очередь получает сообщение, она воссоздает сеанс spark, процесс, который несколько отнимает много времени.

Код выглядит примерно так:

    FileProcessing fileProcessing = fileProcessingRepo.findById(id).get();

    SparkSession sparkSession = SparkSession.builder().master("local").config("spark.executor.memory", "1g")
            .config("spark.driver.memory", "1g").config("spark.memory.offHeap.enabled", true)
            .config("spark.memory.offHeap.size", "3g").appName("xmlProcessing").getOrCreate();

    HashMap<String, String> params = new HashMap<String, String>();
    params.put("rowTag", SOME_TAG);
    Dataset<Row> dfXML = sparkSession.read().format("com.databricks.spark.xml").options(params)
            .load(fileProcessing.getFileFormS3());

    doPartOneOfTheProcessing(dfXML);

    params.put("rowTag", SOME_OTHER_TAG);
    dfXML = sparkSession.read().format("com.databricks.spark.xml").options(params)
            .load(fileProcessing.getFileFormS3());
    dfXML.show(10000);
    doPartTwoOfTheProcessing(dfXML);

    sparkSession.close();

Это выполняется внутриКомпонент, управляемый Spring, вызываемый из потребителя очереди Spring RabbitMQ.

Мой вопрос, кроме удаления загрузки дублирующихся XML-файлов из Spark, каков наилучший способ обработки сеанса Spark в среде Spring / RabbitMQ? Должен ли я позволить Spring управлять созданием SparkSession? Какая часть процесса создания SparkSession является поточно-ориентированной и потенциально может быть оптимизирована в многопоточной среде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...