SnappyData支持Spark Sparkured Streaming

时间:2018-01-16 21:22:17

标签: apache-spark spark-structured-streaming snappydata

我刚刚了解了SnappyData(并观看了一些关于它的视频),它看起来很有趣,主要是说性能可能比普通的火花作业快很多倍。

以下代码(代码段)是否可以利用SnappyData功能来提高作业的性能并提供相同的行为?

Dataset<EventData> ds = spark
  .readStream()
  .format("kafka")
  (...)
  .as(Encoders.bean(EventData.class)); 

KeyValueGroupedDataset<String, EventData> kvDataset = ds.groupByKey(new MapFunction<EventData, String>() {
  public String call(EventData value) throws Exception {
    return value.getId();
  }
}, Encoders.STRING());

Dataset<EventData> processedDataset = kvDataset.mapGroupsWithState(new MapGroupsWithStateFunction<String, EventData, EventData, EventData>(){
  public EventData call(String key, Iterator<EventData> values, GroupState<EventData> state) throws Exception {

    /* state control code */

    EventData processed = EventHandler.validate(key,values);

    return processed;

}}, Encoders.bean(EventData.class), Encoders.bean(EventData.class));

StreamingQuery query = processedDataset.writeStream()
  .outputMode("update")
  .format("console")
  .start();

1 个答案:

答案 0 :(得分:1)

我怀疑SnappyData会优化这个管道。优化设计用于处理DataFrames(托管内存表)以及GroupBy,Join,scan等常用运算符。

在您的示例中,我认为映射函数主导着处理时间。也许,可以将formResponse.status转换为Dataset<EventData>(使用toDF()),将其存储在表中,使用内置的spark-sql运算符或UDF然后对其进行操作。这可能会显着改变摄取率。

在这个简单的例子中,您输出到Console。在现实世界中,我假设你将这种状态摄入某个商店。这是SnappyData可以产生重大影响的地方。