Structured Streaming简单使用

Structured Streaming 是一种基于 Spark SQL 引擎构建的可扩展且容错的流处理引擎。您可以像表达对静态数据的批处理计算一样表达流式计算。Spark SQL 引擎将负责以增量方式持续运行它,并随着流数据不断到达而更新最终结果。您可以使用Scala、Java、Python 或 R 中的Dataset/DataFrame API来表达流聚合、事件时间窗口、流到批连接等。计算在同一个优化的 Spark SQL 引擎上执行。最后,系统通过检查点和预写日志确保端到端的恰好一次容错保证。简而言之,Structured Streaming 提供快速、可扩展、容错、端到端的 exactly-once 流处理,而无需用户对流进行推理。
在内部,默认情况下,结构化流查询是使用微批处理引擎处理的,该引擎将数据流处理为一系列小批作业,从而实现低至 100 毫秒的端到端延迟和恰好一次的容错保证. 然而,从 Spark 2.3 开始,我们引入了一种新的低延迟处理模式,称为Continuous Processing,它可以实现低至 1 毫秒的端到端延迟,并保证至少一次。在不更改查询中的 Dataset/DataFrame 操作的情况下,您将能够根据您的应用程序要求选择模式。

简单示例
1.监听TCP套接字的数据服务器接收到的文本数据中的单词数。您需要做的就是如下。
安装netcat
启动8888端口

import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.streaming.StreamingQuery;
import org.apache.spark.sql.streaming.StreamingQueryException;

import java.util.Arrays;

public class JavaStructuredNetworkWordCount {
    public static void main(String[] args) throws StreamingQueryException {
        SparkSession spark = SparkSession
                .builder()
                .appName("JavaStructuredNetworkWordCount")
                .master("local")
                .getOrCreate();

        // Create DataFrame representing the stream of input lines from connection to localhost:9999
        Dataset<Row> lines = spark
                .readStream()
                .format("socket")
                .option("host", "localhost")
                .option("port", 8888)
                .load();

// Split the lines into words
        Dataset<String> words = lines
                .as(Encoders.STRING())
                .flatMap((FlatMapFunction<String, String>) x -> Arrays.asList(x.split(" ")).iterator(), Encoders.STRING());

// Generate running word count
        Dataset<Row> wordCounts = words.groupBy("value").count();

        // Start running the query that prints the running counts to the console
        StreamingQuery query = wordCounts.writeStream()
                .outputMode("complete")
                .format("console")
                .start();
        query.awaitTermination();
    }
}

2.监听kafka主题消息
首先创建kafka主题并发布消息
引入依赖

 <dependency>
             <groupId> org.apache.spark</groupId>
             <artifactId> spark-sql-kafka-0-10_2.10</artifactId>
             <version>2.2.0</version>
        </dependency>

Java代码如下:

public class KafkaStuctureStream {

    public static void main(String[] args) throws StreamingQueryException {
        SparkSession spark = SparkSession
                .builder()
                .appName("JavaStructuredNetworkWordCount")
                .master("local")
                .getOrCreate();
        Dataset<Row> df = spark
                .readStream()
                .format("kafka")
                .option("kafka.bootstrap.servers", "127.0.0.1:9092")
                .option("subscribe", "dome-topic")
                .load();
        Dataset<String> as = df.selectExpr("CAST(value AS STRING)").as(Encoders.STRING()).flatMap((FlatMapFunction<String, String>) x -> Arrays.asList(x.split(" ")).iterator(), Encoders.STRING());
        Dataset<Row> value = as.groupBy("value").count();
        StreamingQuery query =value.writeStream().format("console").outputMode("update")
                .start();

        query.awaitTermination();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Structured Streaming 是 Apache Spark 的一种流式处理引擎,它可以帮助我们对流式数据进行转换、处理和聚合。Structured Streaming 使用了基于 SQL 的语法,因此我们可以使用熟悉的 SQL 语句来对流式数据进行操作。例如,我们可以使用以下 SQL 语句对流式数据进行过滤: ``` SELECT * FROM stream WHERE value > 5 ``` 或者使用以下 SQL 语句对流式数据进行分组并计算每组的平均值: ``` SELECT key, AVG(value) FROM stream GROUP BY key ``` Structured Streaming 还支持联机处理,即可以对流式数据进行实时处理,并将结果实时输出。这使得我们可以使用 Structured Streaming 实现各种实时数据处理任务,如实时统计、实时分析等。 ### 回答2: 结构化流式处理(Structured Streaming)是一种用于处理实时数据的数据处理引擎。它允许开发人员使用SQL查询实时流数据,无需编写复杂的流式处理程序。Structured Streaming SQL是一种使用SQL语句对实时数据进行查询和操作的方式。 Structured Streaming SQL可以通过Spark SQL的语法和功能来处理实时数据。它可以将实时数据以表的形式表示,并且支持标准SQL查询操作,例如选择、过滤、聚合和连接操作。在Structured Streaming SQL中,开发人员可以使用常见的SQL函数和操作符来处理实时数据。 Structured Streaming SQL还支持时间窗口操作,可以通过指定窗口长度和滑动步长来对实时数据进行分组和聚合。此外,Structured Streaming SQL还支持流-静态表连接,可以将实时流数据与静态数据表进行关联操作,以便获得更丰富的分析结果。 Structured Streaming SQL的一个主要特点是其容错性和弹性。当发生故障或数据丢失时,Structured Streaming可以自动从上次检查点恢复,并且能够动态调整计算资源以适应数据的变化。 总而言之,Structured Streaming SQL提供了一种简单、灵活且易于使用的方式来处理和分析实时数据。通过使用SQL语句,开发人员可以更快地构建和迭代实时数据处理应用程序,从而更好地理解和利用实时数据的价值。 ### 回答3: Structured Streaming是Spark提供的一种流处理方式,可以使用SQL语句来对流式数据进行处理和分析。它使用了DataFrame和Dataset这两种抽象概念,提供了与传统批处理相似的编程模型,可以方便地进行流处理任务。 与传统的流处理方式相比,Structured Streaming具有以下特点: 1. 连接机制:Structured Streaming可以连接各种输入源和输出目标,如Kafka、消息队列等,方便处理不同来源和去向的数据。 2. 强大的API支持:Structured Streaming提供了丰富的API,可以通过SQL语句或DataFrame/Dataset API来执行流处理任务,使得开发人员可以使用熟悉的SQL语言进行流处理操作。 3. 实时处理:Structured Streaming支持实时处理,可以以毫秒级的延迟来处理数据,使得我们能够实时处理数据流并及时生成结果。 4. 容错性:Structured Streaming具有高度的容错性,能够自动处理失败和恢复。它使用了Spark的弹性分布式数据集(RDD)来进行数据处理,一旦发生故障,它可以自动从上一次处理的结果继续进行处理。 5. 一致性:Structured Streaming保证了事件的顺序和一致性,保证数据的完整性和正确性。 6. 扩展性:Structured Streaming具有良好的扩展性,可以根据实际需求进行水平扩展,以满足大规模数据处理的需求。 结构化流处理SQL的使用可以极大地简化流处理任务的编写和维护,使得开发人员能够更加专注于业务逻辑的实现。通过使用结构化流处理SQL,我们可以方便地进行各种流处理操作,包括过滤、转换、聚合以及窗口操作等,同时可以借助Spark的优化能力来提高处理性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值