Spark入门指南:从基础概念到实践应用全解析(11)


Dataset 转 DataFrame:
import spark.implicits._val testDF = testDS.toDFDataFrame 转 Dataset:
import spark.implicits._case class Coltest(col1:String,col2:Int)extends Serializable //定义字段名和类型val testDS = testDF.as[Coltest]这种方法就是在给出每一列的类型后,使用as方法,转成Dataset,这在数据类型在DataFrame需要针对各个字段处理时极为方便 。
注意:在使用一些特殊的操作时 , 一定要加上 import spark.implicits._ 不然toDF、toDS无法使用 。
十、Spark StreamingSpark Streaming 的工作原理是将实时数据流拆分为小批量数据,并使用 Spark 引擎对这些小批量数据进行处理 。这种微批处理(Micro-Batch Processing)的方式使得 Spark Streaming 能够以近乎实时的延迟处理大规模的数据流 。
下面是一个简单的 Spark Streaming 示例代码:
import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}val conf = new SparkConf().setAppName("Spark Streaming Example")val ssc = new StreamingContext(conf, Seconds(1))val lines = ssc.socketTextStream("localhost", 9999)val words = lines.flatMap(_.split(" "))val pairs = words.map(word => (word, 1))val wordCounts = pairs.reduceByKey(_ + _)wordCounts.print()ssc.start()ssc.awaitTermination()我们首先创建了一个 StreamingContext 对象,并指定了批处理间隔为 1 秒 。然后,我们使用 socketTextStream 方法从套接字源创建了一个 DStream 。接下来,我们对 DStream 进行了一系列操作,包括 flatMap、map 和 reduceByKey 。最后,我们使用 print 方法打印出单词计数的结果 。
1.Spark Streaming 优缺点Spark Streaming 作为一种实时流处理框架,具有以下优点:

  • 高性能:Spark Streaming 基于 Spark 引擎,能够快速处理大规模的数据流 。
  • 易用性:Spark Streaming 提供了丰富的 API,可以让开发人员快速构建实时流处理应用 。
  • 容错性:Spark Streaming 具有良好的容错性,能够在节点故障时自动恢复 。
  • 集成性:Spark Streaming 能够与 Spark 生态系统中的其他组件(如 Spark SQL、MLlib 等)无缝集成 。
但是,Spark Streaming 也有一些缺点:
  • 延迟:由于 Spark Streaming 基于微批处理模型 , 因此它的延迟相对较高 。对于需要极低延迟的应用场景,Spark Streaming 可能不是最佳选择 。
  • 复杂性:Spark Streaming 的配置和调优相对复杂 , 需要一定的经验和技能 。
2.DStreamDStream(离散化流)是 Spark Streaming 中用于表示实时数据流的一种抽象 。它由一系列连续的 RDD 组成,每个 RDD 包含一段时间内收集到的数据 。
在 Spark Streaming 中,可以通过以下几种方式创建 DStream:
(1) 从输入源创建 。例如,从套接字源创建 DStream:
import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}val conf = new SparkConf().setAppName("DStream Example")val ssc = new StreamingContext(conf, Seconds(1))val lines = ssc.socketTextStream("localhost", 9999)lines.print()ssc.start()ssc.awaitTermination()(2) 通过转换操作创建 。例如,对现有的 DStream 进行 map 操作:
import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}val conf = new SparkConf().setAppName("DStream Example")val ssc = new StreamingContext(conf, Seconds(1))val lines = ssc.socketTextStream("localhost", 9999)val words = lines.flatMap(_.split(" "))words.print()ssc.start()ssc.awaitTermination()(3) 通过连接操作创建 。例如,对两个 DStream 进行 union 操作:
import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}val conf = new SparkConf().setAppName("DStream Example")val ssc = new StreamingContext(conf, Seconds(1))val lines1 = ssc.socketTextStream("localhost", 9999)val lines2 = ssc.socketTextStream("localhost", 9998)val lines = lines1.union(lines2)lines.print()ssc.start()ssc.awaitTermination()总结:简单来说 DStream 就是对 RDD 的封装,你对 DStream 进行操作 , 就是对 RDD 进行操作 。对于 DataFrame/DataSet/DStream 来说本质上都可以理解成 RDD 。
3.窗口函数在 Spark Streaming 中,窗口函数用于对 DStream 中的数据进行窗口化处理 。它允许你对一段时间内的数据进行聚合操作 。
Spark Streaming 提供了多种窗口函数,包括:


推荐阅读