Spark WebSocketからデータを読み取るストリーミング用のカスタムリーダーがあります。Spark構造化ストリーミングを試してみます。
Spark構造化ストリーミングでストリーミングデータソースを作成するにはどうすればよいですか?
ストリーミングデータソースは org.Apache.spark.sql.execution.streaming.Source を実装します。
org.Apache.spark.sql.execution.streaming.Source
のscaladocは、始めるのに十分な情報を提供するはずです(型に従ってコンパイル可能なScala型を開発するだけです)。
Source
を取得したら、それを登録して、format
のDataStreamReader
で使用できるようにする必要があります。ストリーミングソースを利用可能にしてformat
に使用できるようにする秘訣は、ストリーミングソース用にDataSourceRegister
を作成して登録することです。例は META-INF/services/org.Apache.spark.sql.sources.DataSourceRegister :にあります。
org.Apache.spark.sql.execution.datasources.csv.CSVFileFormat
org.Apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider
org.Apache.spark.sql.execution.datasources.json.JsonFileFormat
org.Apache.spark.sql.execution.datasources.parquet.ParquetFileFormat
org.Apache.spark.sql.execution.datasources.text.TextFileFormat
org.Apache.spark.sql.execution.streaming.ConsoleSinkProvider
org.Apache.spark.sql.execution.streaming.TextSocketSourceProvider
org.Apache.spark.sql.execution.streaming.RateSourceProvider
これは、format
の短い名前を実装にリンクするファイルです。
私のSparkワークショップ中に人々が行うことを通常お勧めするのは、両側から開発を開始することです。
ストリーミングクエリを(format
を使用して)記述します。例:.
val input = spark
.readStream
.format("yourCustomSource") // <-- your custom source here
.load
ストリーミングSource
と対応するDataSourceRegister
を実装します(同じクラスの場合もあります)
(オプション)com.mycompany.spark.MyDataSourceRegister
などの完全修飾クラス名をMETA-INF/services/org.Apache.spark.sql.sources.DataSourceRegister
に書き込んで、DataSourceRegister
を登録します。
$ cat META-INF/services/org.Apache.spark.sql.sources.DataSourceRegister
com.mycompany.spark.MyDataSourceRegister
カスタムDataSourceRegister
のSource
実装を登録する最後のステップはオプションであり、エンドユーザーが使用するデータソースエイリアスを登録するだけです DataFrameReader.format 方法。
format(source:String):DataFrameReader入力データソース形式を指定します。
org.Apache.spark.sql.execution.streaming.RateSourceProvider のコードを確認して、良いスタートを切りましょう。
SparkはV2APIに移行しているため、 DataSourceV2 、 MicroBatchReadSupport 、および DataSourceRegister を実装する必要があります。
これには、Offset
、MicroBatchReader
、DataReader<Row>
、およびDataReaderFactory<Row>
の独自の実装の作成が含まれます。
オンライン(Scala)でのカスタム構造化ストリーミングの例がいくつかあります 例 私の執筆に役立ちました。
カスタムソースを実装したら、ソースの登録でJacekLaskowskiの回答に従うことができます。
また、ソケットから受信するメッセージのエンコーディングによっては、デフォルトのソケットソースを使用し、カスタムマップ関数を使用して、使用するBeanに情報を解析できる場合があります。 Sparkは、デフォルトのソケットストリーミングソースを本番環境で使用すべきではないと言っていることに注意してください!
お役に立てれば!
また、 Here は、Offset, MicroBatchReader, DataReader<Row>
およびDataReaderFactory<Row>
を実装するカスタムWebSocketストリームリーダー/ライターのサンプル実装です。