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

这个示例中 , 我们创建了一个名为 My Accumulator 的累加器 , 并使用 sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum.add(x)) 来对其进行累加 。最后 , 我们使用 println(accum.value) 来输出累加器的值,结果为 10 。
我们可以利用子类AccumulatorParam创建自己的累加器类型 。AccumulatorParam接口有两个方法:zero方法为你的数据类型提供一个“0 值”(zero value),addInPlace方法计算两个值的和 。例如,假设我们有一个Vector类代表数学上的向量,我们能够如下定义累加器:
object VectorAccumulatorParam extends AccumulatorParam[Vector] {def zero(initialValue: Vector): Vector = {Vector.zeros(initialValue.size)}def addInPlace(v1: Vector, v2: Vector): Vector = {v1 += v2}}// Then, create an Accumulator of this type:val vecAccum = sc.accumulator(new Vector(...))(VectorAccumulatorParam)九、Spark SQLSpark为结构化数据处理引入了一个称为Spark SQL的编程模块 。它提供了一个称为DataFrame的编程抽象,并且可以充当分布式SQL查询引擎 。
1.Spark SQL的特性

  • 集成:无缝地将SQL查询与Spark程序混合 。Spark SQL允许将结构化数据作为Spark中的分布式数据集(RDD)进行查询 , 在Python,Scala和Java中集成了API 。这种紧密的集成使得可以轻松地运行SQL查询以及复杂的分析算法 。
  • Hive兼容性:在现有仓库上运行未修改的Hive查询 。Spark SQL重用了Hive前端和MetaStore,提供与现有Hive数据,查询和UDF的完全兼容性 。只需将其与Hive一起安装即可 。
  • 标准连接:通过JDBC或ODBC连接 。Spark SQL包括具有行业标准JDBC和ODBC连接的服务器模式 。
  • 可扩展性:对于交互式查询和长查询使用相同的引擎 。Spark SQL利用RDD模型来支持中查询容错,使其能够扩展到大型作业 。不要担心为历史数据使用不同的引擎 。
2.Spark SQL 数据类型Spark SQL 支持多种数据类型,包括数字类型、字符串类型、二进制类型、布尔类型、日期时间类型和区间类型等 。
数字类型包括:
  • ByteType:代表一个字节的整数,范围是 -128 到 127¹² 。
  • ShortType:代表两个字节的整数,范围是 -32768 到 32767¹² 。
  • IntegerType:代表四个字节的整数 , 范围是 -2147483648 到 2147483647¹² 。
  • LongType:代表八个字节的整数,范围是 -9223372036854775808 到 9223372036854775807¹² 。
  • FloatType:代表四字节的单精度浮点数¹² 。
  • DoubleType:代表八字节的双精度浮点数¹² 。
  • DecimalType:代表任意精度的十进制数据 , 通过内部的 java.math.BigDecimal 支持 。BigDecimal 由一个任意精度的整型非标度值和一个 32 位整数组成¹² 。
字符串类型包括:
  • StringType:代表字符字符串值 。
二进制类型包括:
  • BinaryType:代表字节序列值 。
布尔类型包括:
  • BooleanType:代表布尔值 。
日期时间类型包括:
  • TimestampType:代表包含字段年、月、日、时、分、秒的值 , 与会话本地时区相关 。时间戳值表示绝对时间点 。
  • DateType:代表包含字段年、月和日的值,不带时区 。
区间类型包括:
  • YearMonthIntervalType (startField, endField):表示由以下字段组成的连续子集组成的年月间隔:MONTH(月份) , YEAR(年份) 。
  • DayTimeIntervalType (startField, endField):表示由以下字段组成的连续子集组成的日时间间隔:SECOND(秒) , MINUTE(分钟),HOUR(小时),DAY(天) 。
复合类型包括: