返回顶部
首页 > 资讯 > 精选 >Spark-Alchemy中HyperLogLog如何使用
  • 236
分享到

Spark-Alchemy中HyperLogLog如何使用

2023-06-19 12:06:03 236人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关spark-Alchemy中HyperLogLog如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Reaggregation的挑战Reaggre

本篇文章给大家分享的是有关spark-Alchemy中HyperLogLog如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Reaggregation的挑战

Reaggregation的成立存在先决条件, 预先计算的维度可以再次进行聚合, 在字典释义中聚合表示可聚合性,通过进一步扩展该语义来解释reaggregation - 具有可以再次进行聚合的聚合, 求和,最大值,最小值都是可以reaggregation的, 但是distinct count是不支持reaggregation的,主要因为存在二次计数的问题, 统计每个网站的访问人数的总和并不等于访问网站的总人数,这是由于单个访问者可以访问多个网站。

这种不可重新聚合的特性使得计算distinct count的系统必须访问最细粒度的数据,因此每个查询需要访问每一行数据去统计distinct count。

Spark-Alchemy中HyperLogLog如何使用

大数据领域, distinct counts存在另外一个问题,在计算过程需要的内存大小是更需要统计不同结果集的大小成正比的,为了避免上述问题,近年来一些大数据平台如Apache Spark 以及面向分析的数据库如Amazon RedShift引入基数估计的算法,该算法使用HyperLogLog(HLL)去估计distinct counts, 在spark 中如果要使用基数估计算法,只要使用approx_count_distinct(x [, rsd])代替COUNT(DISTINCT x)就可以运行, 其中可选参数rsd代表可以容忍的误差, 在databricks的测试报告, HLL的聚合性能可以达到精确计算distinct count性能的2-8倍,误差率保持在1%以上,用户可以追求更高精度,但是HLL算法的运行时间可能要比精确计算distinct count时间更长。

2-8倍性能的提升的代价是误差率始终保持在1%以上, 这在某些场景下是不可接受的, 此外在预先聚合能带来1000倍的性能提升面前, 2-8倍性能显得微不足道, 对此我们能做些什么?下面首先介绍下HLL算法。

HyperLogLog算法

HLL算法在Spark 处理流程可以分为以下几个部分

  • Map阶段

    • 初始化HLL sketch数据结构

    • 为每个HLL sketch加入输入

    • 发送HLL sketch

  • Reduce

    • 合并所有的HLL sketches到聚合的sketch

  • Finalize

    HLL sketch是支持reaggreation, reduce阶段合并产生的依旧是HLL sketch,用户可以序列化该结果,并将该结果持久化存储,作为预先聚合的一部分,为后续计算distinct count提供输入,这样就可以带来1000倍的提升。

    • 从聚合的sketch中计算出distinct count的估计值

这种方法还能另外一种好处,通过该方法用户可以将误差率控制1%以内,由于预先聚合可以带来1000倍的提升,我们可以花费更长的时间来计算HLL以便达到更小的误差率,在预先聚合阶段,花费2-5倍的计算预先聚合时间是可以接受的, 对大多数用户而言,性能提升的同时基本没有任何其他方面的牺牲。

Spark-Alchemy介绍:HLL 功能

由于Spark社区不支持HLL功能,Swoop将这部分功能作为spark-alchemy库的一部分进行开源,用户可以参照HLL文档提供的样例, 相比BigQuery的HLL支持,Spark alchemy提供了更加丰富的功能。

下图显示spark alchemy HLL是如何处理聚合的初始化(hll_init_agg), 重新聚合(hll_merg) 以及最后结果的展示(hll_cardinality)

Spark-Alchemy中HyperLogLog如何使用

如果用户担心HLL sketches的存储开销, 通过以下规则可以进行简单的估算:精度提高2倍, HLL sketches的存储开销将会提升4倍, 在大部分应用程序中,记录数目的减少带来的存储开销的减少远远超过HLL sketch增加的开销

Spark-Alchemy中HyperLogLog如何使用

HyperLogLog互操作性

Distinct count精确计算以及估算模式的相互切换以及将HLL sketches保存为列式数据可以避免用户在查询的时候遍历所有记录数据, 但是系统在准备HLL数据的时候还是需要访问所有的记录数据。此外对于HLLsketches的序列化业界也没有统一的标准,所以HLL的数据在不同的系统中不能够共享, 这种互操作性的不便利性增加交互分析系统的分析成本以及复杂度。
交互式分析系统要求快速的响应时间,但是这个要求不是大数据系统核心的设计目标,这就是为什么现在交互式分析还运行在在关系型或者NoSQL数据库上的原因,没有HLL sketches的互操作性便利,用户可能在交互式查询还是使用原有的方式。
为了解决这个问题, spark alchemey在开发HLL相关功能时,提供了一种存储格式以及原生支持Postgres兼容的数据库, 这样对于要求快速响应时间的系统而言, spark就可以作为数据预处理统一平台, 这种架构的好处如下

  • 99%以上的数据通过spark进行管理,没有副本

  • 99%以上处理发生在spark支持,包括预先聚合

  • 交互式查询性能更高以及需要的资源更少

以上就是Spark-Alchemy中HyperLogLog如何使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Spark-Alchemy中HyperLogLog如何使用

本文链接: https://lsjlt.com/news/296155.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spark-Alchemy中HyperLogLog如何使用
    本篇文章给大家分享的是有关Spark-Alchemy中HyperLogLog如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Reaggregation的挑战Reaggre...
    99+
    2023-06-19
  • Redis中HyperLogLog数据类型如何使用
    这篇文章主要讲解了“Redis中HyperLogLog数据类型如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中HyperLogLog数据类型如何使用”吧!1. HyperL...
    99+
    2023-07-05
  • Redis如何使用HyperLogLog的实现
    目录1. 概述2. 什么是基数3. 命令3.1 PFADD3.2 PFCOUNT3.3 PFMERGE1. 概述 Redis 在 2.8.9 版本添加了 HyperLogLog 数据...
    99+
    2024-04-02
  • spark中的transform如何使用
    在Spark中,transform方法用于将RDD转换为其他类型的RDD。它接受一个函数作为参数,该函数将输入RDD的每个元素转换为...
    99+
    2024-04-02
  • Redis中HyperLogLog的使用详情
    目录前言添加元素前言 HyperlogLog ,基数统计; 那什么是基数? 比如有两个数组 数组A = [1,2,3,4,5]; 数组B = [3,4,5,6,7]; 这时候基数就是 [1,2,3,4...
    99+
    2024-04-02
  • PHP中使用Redis的hyperLogLog计数器
    PHP是一种常用的服务器端编程语言,常常被用于开发Web应用程序。而Redis是一个开源的内存数据库,被广泛使用于缓存、分布式锁等场景。Redis有一个特殊的数据结构——HyperLogLog,可以进行基数估计。在某些场景下,我们需要对用户...
    99+
    2023-05-15
    PHP redis hyperloglog
  • 如何使用java写spark
    这篇文章给大家分享的是有关如何使用java写spark的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。package hgs.spark;import java.util.ArrayList;i...
    99+
    2023-06-02
  • Redis中 HyperLogLog数据类型使用小结
    目录1. HyperLogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些...
    99+
    2023-03-13
    Redis HyperLogLog数据类型使用 Redis HyperLogLog数据类型
  • Redis中 HyperLogLog数据类型使用小结
    目录1. HyperlogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些特性和方法7.使用场景总结:1. Hy...
    99+
    2023-03-13
    Redis HyperLogLog数据类型使用 Redis HyperLogLog数据类型
  • MongoDB如何与Spark集成使用
    MongoDB和Spark可以通过MongoDB Connector for Apache Spark实现集成。 MongoDB C...
    99+
    2024-05-07
    MongoDB Spark
  • spark中如何使用groupByKey进行分组排序
    今天小编给大家分享一下spark中如何使用groupByKey进行分组排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。任务...
    99+
    2023-07-05
  • Kubernetes中如何部署Spark
    小编给大家分享一下Kubernetes中如何部署Spark,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spark是新一代分布式内存计算框架,Apache开源的顶...
    99+
    2023-06-27
  • spark-shell如何使用yarn模式并使用队列
    这篇文章给大家分享的是有关spark-shell如何使用yarn模式并使用队列的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。spark-shell使用yarn模式,并使用队列sp...
    99+
    2024-04-02
  • 如何使用Spark分析云HBase的数据
    这篇文章将为大家详细讲解有关如何使用Spark分析云HBase的数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 云HBase查询分析的现状HBase原生API:HBase原生API适合基于row k...
    99+
    2023-06-02
  • Spark中怎样使用HanLP分词
    Spark中怎样使用HanLP分词,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。将HanLP的data(包含词典和模型)放到hdfs上,然后在项目配置文件han...
    99+
    2023-06-02
  • 如何解析spark-streaming中的socketTextStream
    本篇文章为大家展示了如何解析spark-streaming中的socketTextStream,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。package hgs.spark.stream...
    99+
    2023-06-02
  • Spark Sql中FROM_UNIXTIME和UNIX_TIMESTAMP怎么使用
    这篇文章主要介绍“Spark Sql中FROM_UNIXTIME和UNIX_TIMESTAMP怎么使用”,在日常操作中,相信很多人在Spark Sql中FROM_UNIXTIME和UNIX_TIMESTAMP怎么使用问题...
    99+
    2023-06-29
  • 如何在spark集群环境下使用hanlp进行中文分词
    这篇文章主要介绍“如何在spark集群环境下使用hanlp进行中文分词”,在日常操作中,相信很多人在如何在spark集群环境下使用hanlp进行中文分词问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在sp...
    99+
    2023-06-02
  • spark集群如何使用hanlp进行分布式分词
    这篇文章主要介绍“spark集群如何使用hanlp进行分布式分词”,在日常操作中,相信很多人在spark集群如何使用hanlp进行分布式分词问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 如何使用IDEA开发Spark SQL程序(一文搞懂)
    目录前言Spark SQL是什么1、使用IDEA开发Spark SQL 1.1、指定列名添加Schema1.2、通过StructType指定Schema1.3、反射推断Sc...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作