Как загрузить потоковые данные из Amazon SQS?

Я использую Spark 2.2.0.

Как я могу подавать поток Amazon SQS для создания структурированного потока с помощью pyspark?

Этот вопрос пытается ответить на него для неструктурированной потоковой передачи и для scala, создав пользовательский приемник.
Возможно ли что-то подобное в pyspark?

spark.readStream \
   .format("s3-sqs") \
   .option("fileFormat", "json") \
   .option("queueUrl", ...) \
   .schema(...) \
   .load()

Согласно Databricks выше приемник может использоваться для источника файлов S3-SQS. Однако, только для SQS, как можно подойти.

Я получал сообщение от AWS-SQS-Receive_Message. Однако, как напрямую отправлять поток в искрообразование, неясно.

Ответ 1

Я ничего не знаю об Amazon SQS, но "как я могу подавать поток Amazon SQS для создания структурированного потока с помощью pyspark". невозможно с любой внешней системой обмена сообщениями или источником данных с использованием Spark Structured Streaming (также называемых "Искрыми потоками").

Другое дело в Spark Structured Streaming, когда Spark вытягивает данные через равные промежутки времени (подобно тому, как работает Kafka Consumer API, где он извлекает данные, а не дается).

Другими словами, Spark "Потоки" - это еще один потребитель сообщений из "очереди" в Amazon SQS.

Всякий раз, когда меня просят интегрировать внешнюю систему с Spark "Потоки", я начинаю писать клиент для системы, используя API клиент/потребитель.

Как только у меня это будет, следующим шагом будет разработка настраиваемого источника потоковой передачи для внешней системы, например Amazon SQS, с использованием примера клиентского кода выше.

При разработке настраиваемого Source потоковой передачи вам необходимо выполнить следующие действия:

  1. Напишите класс Scala, который реализует свойство Source

  2. Зарегистрируйте класс Scala (пользовательский Source) с помощью Spark SQL, используя файл META-INF/services/org.apache.spark.sql.sources.DataSourceRegister с полным именем класса или используйте полное имя класса в format

Наличие пользовательского источника потоковой передачи - это двухчастная разработка с разработкой источника (и, возможно, его регистрация с помощью Spark SQL) и использование его в приложении Spark Structured Streaming (на Python) с помощью метода format.