web-dev-qa-db-ja.com

Amazon SQSからストリーミングデータをロードする方法は?

Spark 2.2.0を使用します。

Pysparkを使用してAmazonSQSストリームをspark構造化ストリームにフィードするにはどうすればよいですか?

This 質問は、構造化されていないストリーミングとscala)について、カスタムレシーバーを作成することで回答しようとします。
pysparkでも同様のことが可能ですか?

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

Databricks によると、上記のレシーバーはS3-SQSファイルソースに使用できます。ただし、SQSの場合のみ、どのようにアプローチできますか。

AWS-SQS-Receive_Message からメッセージを受信することを理解してみました。ただし、ストリームをsparkストリーミングに直接送信する方法は明確ではありませんでした。

13
user3698581

Amazon SQSについては何も知りませんが、 "pysparkを使用してAmazon SQSストリームをspark構造化ストリームにフィードするにはどうすればよいですか。" Spark構造化ストリーミング(別名Spark "Streams")を使用する外部メッセージングシステムまたはデータソース。

Spark構造化ストリーミングでは、データを定期的にプルするのはSparkの場合とは逆です(KafkaコンシューマーAPIが機能し、データをプルしない場合と同様です)。 )。

言い換えると、Spark「Streams」はAmazonSQSの「キュー」からのメッセージのもう1つのコンシューマーです。

外部システムをSpark "Streams"と統合するように求められたときはいつでも、クライアント/コンシューマーAPIを使用してシステムのクライアントの作成を開始します。

それができたら、次のステップは、外部システム用のカスタムストリーミング ソース を開発することです。上記のサンプルクライアントコードを使用したAmazonSQS。

カスタムストリーミングSourceを開発している間、次の手順を実行する必要があります。

  1. Sourceトレイトを実装するScalaクラスを記述します

  2. Scalaクラス(カスタムSource)をSpark SQLに登録するには、META-INF/services/org.Apache.spark.sql.sources.DataSourceRegisterファイルを完全修飾クラス名で使用するか、formatで完全修飾クラス名を使用します。

カスタムストリーミングソースを持つことは、ソースを開発し(そして、オプションでSpark SQLに登録し)、formatメソッドを使用してSpark構造化ストリーミングアプリケーション(Python)で使用するという2つの部分からなる開発です。 。

5
Jacek Laskowski