Обработка SOAP POST-запроса для DataBricks через Spark API
Я пытаюсь создать в Azure Databricks функциональность, которая бы извлекала значение из входящего почтового запроса SOAP (XML-файла), предпочтительно с использованием Python / PySpark, который затем использовался бы в другом процессе, использующем Python. requests
библиотека для передачи туда и обратно нескольких запросов SOAP, а затем сохраняет полученные необработанные данные в хранилище BLOB-объектов Azure.
Извлечение значения из SOAP-пост-запроса для контекста:
from bs4 import BeautifulSoup
template_source = '/.../template.xml'
def edit_template(incoming_soap_string, template_source_file):
""" This function retrieves the ID,
spits out a copy of the content of the template containing the ID,
makes it ready for a SOAP request body"""
# Get the ID from the incoming the SOAP XML
soup = BeautifulSoup(incoming_soap_string, "xml")
ID = soup.param.attrs.get('value')
# Open the template file line by line:
with open(template_source_file) as source:
# Lines that actually contain the fields that need replacing:
line_numbers_to_parse = [6, 25, 35, 45, 55, 65, 75, 120, 130, 140, 150, 160, 170]
line_number = 1
output_string = ''
for line in source:
if line_number in line_numbers_to_parse:
active_line = str(line)
active_line = active_line.replace('REPLACE_THIS_FIELD', ID)
output_string += active_line
else:
output_string += line
line_number += 1
return output_string
Я написал скрипты на Python, которые выполняют шаги вперед и назад, и сейчас я переписываю их в PySpark, но я столкнулся с тем фактом, что использование запросов POST менее тривиально.
Единственный способ найти то, что мне нужно, это flask
библиотека вот так:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def result():
byte_string = request.data
xml = byte_string.decode("utf-8")
new_template = edit_template(xml, template_source)
print(new_template)
return new_template
Проблема с этим, однако, заключается в том, что было бы чрезвычайно трудно переписать эту реализацию в Spark API таким способом, который был бы масштабируемым. Итак, мои вопросы:
- Есть ли способ полностью обойти записные книжки и по-разному воспринимать почтовый запрос, возможно, с использованием другой службы Azure?
- Если нет, есть ли масштабируемый способ получения запросов на публикацию на Python без необходимости перезаписывать много библиотек?