我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于 Spark 的数据分析实践是怎样进行的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于 Spark 的数据分析实践是怎样进行的

今天就跟大家聊聊有关基于 Spark 的数据分析实践是怎样进行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

引言:

Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷。Spark主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件。

下面主要分析了 Spark RDD 以及 RDD 作为开发的不足之处,介绍了 SparkSQL 对已有的常见数据系统的操作方法,以及重点介绍了普元在众多数据开发项目中总结的基于 SparkSQL Flow 开发框架。

一、Spark RDD

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、元素可并行计算的集合。

RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。

//Scala 在内存中使用列表创建

val lines = List(“A”, “B”, “C”, “D” …)val rdd:RDD = sc.parallelize(lines);

//以文本文件创建

val rdd:RDD[String] = sc.textFile(“hdfs://path/filename”)

Spark RDD Partition 分区划分

基于 Spark 的数据分析实践是怎样进行的

新版本的 Hadoop 已经把 BlockSize 改为 128M,也就是说每个分区处理的数据量更大。

Spark 读取文件分区的核心原理

本质上,Spark 是利用了 Hadoop 的底层对数据进行分区的 API(InputFormat):

public abstract class InputFormat<K,V>{  public abstract List<InputSplit> getSplits(JobContextcontext                               ) throwsIOException,InterruptedException;    public abstract RecordReader<K,V> createRecordReader(InputSplitsplit,                                         TaskAttemptContextcontext                                        )throwsIOException,InterruptedException;}

Spark 任务提交后通过对输入进行 Split,在 RDD 构造阶段,只是判断是否可 Split(如果参数异常一定在此阶段报出异常),并且 Split 后每个 InputSplit 都是一个分区。只有在Action 算子提交后,才真正用 getSplits 返回的 InputSplit 通过 createRecordReader 获得每个 Partition 的连接。

然后通过 RecordReader 的 next() 遍历分区内的数据。

Spark RDD 转换函数和提交函数

基于 Spark 的数据分析实践是怎样进行的

Spark RDD 的众多函数可分为两大类Transformation 与 Action。Transformation 与 Action 的区别在于,对 RDD 进行 Transformation 并不会触发计算:Transformation 方法所产生的 RDD 对象只会记录住该 RDD 所依赖的 RDD 以及计算产生该 RDD 的数据的方式;只有在用户进行 Action 操作时,Spark 才会调度 RDD 计算任务,依次为各个 RDD 计算数据。这就是 Spark RDD 内函数的“懒加载”特性。

二、基于Spark RDD数据开发的不足

由于MapReduce的shuffle过程需写磁盘,比较影响性能;而Spark利用RDD技术,计算在内存中流式进行。另外 MapReduce计算框架(API)比较局限, 使用需要关注的参数众多,而Spark则是中间结果自动推断,通过对数据集上链式执行函数具备一定的灵活性。

即使 SparkRDD 相对于 MapReduce 提高很大的便利性,但在使用上仍然有许多问题。体现在一下几个方面:

  1. RDD 函数众多,开发者不容易掌握,部分函数使用不当 shuffle时造成数据倾斜影响性能;

  2. RDD 关注点仍然是Spark太底层的 API,基于 Spark RDD的开发是基于特定语言(Scala,Python,Java)的函数开发,无法以数据的视界来开发数据;

  3. 对 RDD 转换算子函数内部分常量、变量、广播变量使用不当,会造成不可控的异常;

  4. 对多种数据开发,需各自开发RDD的转换,样板代码较多,无法有效重利用;

  5. 其它在运行期可能发生的异常。如:对象无法序列化等运行期才能发现的异常。

三、SparkSQL

Spark 从 1.3 版本开始原有 SchemaRDD 的基础上提供了类似Pandas DataFrame API。新的DataFrame API不仅可以大幅度降低普通开发者的学习门槛,同时还支持Scala、Java与Python三种语言。更重要的是,由于脱胎自SchemaRDD,DataFrame天然适用于分布式大数据场景。

基于 Spark 的数据分析实践是怎样进行的

一般的数据处理步骤:读入数据 -> 对数据进行处理 -> 分析结果  -> 写入结果

SparkSQL 结构化数据

  • 处理结构化数据(如 CSV,JSON,Parquet 等);

  • 把已经结构化数据抽象成 DataFrame (HiveTable);

  • 非结构化数据通过 RDD.map.filter 转换成结构化进行处理;

  • 按照列式数据库,只加载非结构化中可结构化的部分列(Hbase,MongoDB);

处理非结构化数据,不能简单的用 DataFrame 装载。而是要用 SparkRDD 把数据读入,在通过一系列的 Transformer Method 把非结构化的数据加工为结构化,或者过滤到不合法的数据。

SparkSQL DataFrame

基于 Spark 的数据分析实践是怎样进行的

SparkSQL 中一切都是 DataFrame,all in DataFrame. DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。如果熟悉 Python Pandas 库中的 DataFrame 结构,则会对 SparkSQL DataFrame 概念非常熟悉。

TextFile DataFrame

import.org.apache.spark.sql._//定义数据的列名称和类型valdt=StructType(List(id:String,name:String,gender:String,age:Int))//导入user_info.csv文件并指定分隔符vallines = sc.textFile("/path/user_info.csv").map(_.split(","))//将表结构和数据关联起来,把读入的数据user.csv映射成行,构成数据集valrowRDD = lines.map(x=>Row(x(0),x(1),x(2),x(3).toInt))//通过SparkSession.createDataFrame()创建表,并且数据表表头val df= spark.createDataFrame(rowRDD, dt)

读取规则数据文件作为DataFrame

SparkSession.Builder builder = SparkSession.builder()Builder.setMaster("local").setAppName("TestSparkSQLApp")SparkSession spark = builder.getOrCreate();SQLContext sqlContext = spark.sqlContext();# 读取 JSON 数据,path 可为文件或者目录valdf=sqlContext.read().json(path);# 读取 HadoopParquet 文件vardf=sqlContext.read().parquet(path);# 读取 HadoopORC 文件vardf=sqlContext.read().orc(path);

JSON 文件为每行一个 JSON 对象的文件类型,行尾无须逗号。文件头也无须[]指定为数组;SparkSQL 读取是只是按照每行一条 JSON Record序列化;

Parquet文件

Configurationconfig = new Configuration();ParquetFileReaderreader = ParquetFileReader.open(        HadoopInputFile.fromPath(new Path("hdfs:///path/file.parquet"),conf));Map<String, String>schema = reader.getFileMetaData().getKeyValueMetaData();String allFields= schema.get("org.apache.spark.sql.parquet.row.metadata");

allFiedls 的值就是各字段的名称和具体的类型,整体是一个json格式进行展示。

读取 Hive 表作为 DataFrame

Spark2 API 推荐通过 SparkSession.Builder 的 Builder 模式创建 SparkContext。 Builder.getOrCreate() 用于创建 SparkSession,SparkSession 是 SparkContext 的封装。

在Spark1.6中有两个核心组件SQLcontext和HiveContext。SQLContext 用于处理在 SparkSQL 中动态注册的表,HiveContext 用于处理 Hive 中的表。

从Spark2.0以上的版本开始,spark是使用全新的SparkSession接口代替Spark1.6中的SQLcontext和HiveContext。SQLContext.sql 即可执行 Hive 中的表,也可执行内部注册的表;

在需要执行 Hive 表时,只需要在 SparkSession.Builder 中开启 Hive 支持即可(enableHiveSupport())。

SparkSession.Builder builder = SparkSession.builder().enableHiveSupport();SparkSession spark = builder.getOrCreate();SQLContext sqlContext = spark.sqlContext();

// db 指 Hive 库中的数据库名,如果不写默认为 default

// tableName 指 hive 库的数据表名

sqlContext.sql(“select * from db.tableName”)

SparkSQL ThriftServer

//首先打开 Hive 的 Metastore服务

hive$bin/hive –-service metastore –p 8093

//把 Spark 的相关 jar 上传到hadoophdfs指定目录,用于指定sparkonyarn的依赖 jar

spark$hadoop fs –put jars/*.jar /lib/spark2

// 启动 spark thriftserver 服务

spark$ sbin/start-thriftserver.sh --master yarn-client --driver-memory 1G --conf spark.yarn.jars=hdfs:///lib/spark2/*.jar

当hdfs 上传了spark 依赖 jar 时,通过spark.yarn.jars 可看到日志 spark 无须每个job 都上传jar,可节省启动时间

19/06/1114:08:26 INFO Client: Source and destination file systems are the same. Notcopying hdfs://localhost:9000/lib/spark2/snappy-java-1.0.5.jar19/06/1114:08:26 INFO Client: Source and destination file systems are the same. Notcopying hdfs://localhost:9000/lib/spark2/snappy-java-1.1.7.3.jar

//通过 spark bin 下的 beeline 工具,可以连接到 spark ThriftServer(SparkOnHive)

bin/beeline -u jdbc:hive2://ip:10000/default -n hadoop

-u 是指定 beeline 的执行驱动地址;

-n 是指定登陆到 spark Session 上的用户名称;

Beeline 还支持传入-e 可传入一行 SQL, 

-e <query>                      query that should be executed

也可通过 –f 指定一个 SQL File,内部可用逗号分隔的多个 SQL(存储过程)

-f <exec file>                  script file that should be executed

SparkSQL Beeline 的执行效果展示

基于 Spark 的数据分析实践是怎样进行的

SparkSQL ThriftServer

基于 Spark 的数据分析实践是怎样进行的

对于 SparkSQL ThriftServer 服务,每个登陆的用户都有创建的 SparkSession,并且执行的对个 SQL 会通过时间顺序列表展示。

SparkSQL ThriftServer 服务可用于其他支持的数据库工具创建查询,也用于第三方的 BI 工具,如 tableau。

四、SparkSQL Flow

SparkSQL Flow 是以 SparkSQL 为基础,开发的统一的基于 XML 配置化的可执行一连串的 SQL 操作,这一连串的 SQL 操作定义为一个 Flow。下文开始 SparkSQL Flow 的介绍:

SparkSQL Flow 是基于 SparkSQL 开发的一种基于 XML 配置化的 SQL 数据流转处理模型。该模型简化了 SparkSQL 、Spark RDD的开发,并且降低开发了难度,适合了解数据业务但无法驾驭大数据以及 Spark 技术的开发者。

  • 一个由普元技术部提供的基于 SparkSQL 的开发模型;

  • 一个可二次定制开发的大数据开发框架,提供了灵活的可扩展 API;

  • 一个提供了 对文件,数据库,NoSQL 等统一的数据开发视界语义;

  • 基于 SQL 的开发语言和 XML 的模板配置,支持 Spark UDF 的扩展管理;

  • 支持基于 Spark Standlone,Yarn,Mesos 资源管理平台;

  • 支持开源、华为、星环等平台统一认证。

SparkSQL Flow 适合的场景:

  1. 批量 ETL;

  2. 非实时分析服务;

SparkSQL Flow XML 概览

基于 Spark 的数据分析实践是怎样进行的

  1. Properties 内定义一组变量,可用于宏替换;

  2. Methods 内可注册 udf 和 udaf 两种函数;

  3. Prepare 内可定义前置 SQL,用于执行 source 前的 sql 操作;

  4. Sources 内定义一个到多个数据表视图;

  5. Transformer 内可定义 0 到多个基于 SQL 的数据转换操作(支持 join);

  6. Targets 用于定义 1 到多个数据输出;

  7. After 可定义 0到多个任务日志;

如你所见,source 的 type 参数用于区分 source 的类型,source 支持的种类直接决定SparkSQL Flow 的数据源加载广度;并且,根据 type 不同,source 也需要配置不同的参数,如数据库还需要 driver,url,user和 password 参数。

Transformer 是基于 source 定的数据视图可执行的一组转换 SQL,该 SQL 符合 SparkSQL 的语法(SQL99)。Transform 的 SQL 的执行结果被作为中间表命名为 table_name 指定的值。

Targets 为定义输出,table_name 的值需在 source 或者 Transformer 中定义。

SparkSQL Flow 支持的Sourse

基于 Spark 的数据分析实践是怎样进行的

  • 支持从 Hive 获得数据;

  • 支持文件:JSON,TextFile(CSV),ParquetFile,AvroFile

  • 支持RDBMS数据库:PostgreSQL, MySQL,Oracle

  • 支持 NOSQL 数据库:Hbase,MongoDB

SparkSQL Flow TextFile Source

textfile 为读取文本文件,把文本文件每行按照 delimiter 指定的字符进行切分,切分不够的列使用 null 填充。

<source type="textfile" table_name="et_rel_pty_cong"              fields="cust_id,name1,gender1,age1:int"               delimiter=","              path="file:///Users/zhenqin/software/hive/user.txt"/>
  1. Tablename 为该文件映射的数据表名,可理解为数据的视图;

  2. Fields 为切分后的字段,使用逗号分隔,字段后可紧跟该字段的类型,使用冒号分隔;

  3. Delimiter 为每行的分隔符;

  4. Path 用于指定文件地址,可以是文件,也可是文件夹;

  5. Path 指定地址需要使用协议,如:file:// 、 hdfs://,否则跟 core-site.xml 配置密切相关;

SparkSQL Flow DB Source

<source type="mysql" table_name="et_rel_pty_cong"                table="user"                url="jdbc:mysql://localhost:3306/tdb?characterEncoding=UTF-8"                driver="com.mysql.jdbc.Driver"                user="root" password="123456"/>

RDBMS 是从数据库使用 JDBC读取 数据集。支持 type 为:db、mysql、oracle、postgres、mssql;

  1. tablename 为该数据表的抽象 table 名称(视图);

  2. url、driver、user,password 为数据库 JDBC 驱动信息,为必须字段;

  3. SparkSQL 会加载该表的全表数据,无法使用 where 条件。

SparkSQL Flow Transformer

<transform type="sql" table_name="cust_id_agmt_id_t" cached="true">            SELECT c_phone,c_type,c_num, CONCAT_VAL(cust_id) as cust_ids            FROM user_concat_testx            group by c_phone,c_type,c_num</transform>

Transform 支持 cached 属性,默认为 false;如果设置为 true,相当于把该结果缓存到内存中,缓存到内存中的数据在后续其它 Transform 中使用能提高计算效率。但是需使用大量内存,开发者需要评估该数据集能否放到内存中,防止出现 OutofMemory 的异常。

SparkSQL Flow Targets

SparkSQL Flow Targets 支持输出数据到一个或者多个目标。这些目标,基本覆盖了 Source 包含的外部系统。下面以 Hive 举例说明:

<target type="hive" table_name="cust_id_agmt_id_t"  savemode=”append”target_table_name="cust_id_agmt_id_h"/>
  1. table_name 为 source 或者 Transform 定义的表名称;

  2. target_table_name 为 hive 中的表结果,Hive 表可不存在也可存在,sparksql 会根据 DataFrame 的数据类型自动创建表;

  3. savemode 默认为 overwrite 覆盖写入,当写入目标已存在时删除源表再写入;支持 append 模式, 可增量写入。

Target 有一个特殊的 show 类型的 target。用于直接在控制台输出一个 DataFrame 的结果到控制台(print),该 target 用于开发和测试。

<target type="show" table_name="cust_id_agmt_id_t" rows=”10000”/>

Rows 用于控制输出多少行数据。

SparkSQL Around

After 用于 Flow 在运行结束后执行的一个环绕,用于记录日志和写入状态。类似 Java 的 try {} finally{ round.execute() }

多个 round 一定会执行,round 异常不会导致任务失败。 

<prepare>        <round type="mysql"               sql="insert into cpic_task_history(id, task_type, catalog_model, start_time, retry_count, final_status, created_at)               values(${uuid}, ${task.type}, ${catalog.model}, ${starttime}, 0, ${status}, now())"               url="${jdbc.url}" .../></prepare><after>        <round type="mysql"               sql="update cpic_task_history set               end_time = ${endtime}, final_status = ${status}, error_text = ${error} where id = ${uuid}"               url="${jdbc.url}”…/></after>

Prepare round 和 after round 配合使用可用于记录 SparkSQL Flow 任务的运行日志。

SparkSQL Around可使用的变量

基于 Spark 的数据分析实践是怎样进行的

SparkSQL Around的执行效果

基于 Spark 的数据分析实践是怎样进行的

Prepare round 可做插入(insert)动作,after round 可做更新 (update)动作,相当于在数据库表中从执行开始到结束有了完整的日志记录。SparkSQL Flow 会保证round 一定能被执行,而且 round 的执行不影响任务的状态。

SparkSQL Flow 提交

bin/spark-submit --master yarn-client --driver-memory 1G \--num-executors 10 --executor-memory 2G \--jars /lib/jsoup-1.11.3.jarlib/jsqlparser-0.9.6.jar,/lib/mysql-connector-java-5.1.46.jar \--conf spark.yarn.jars=hdfs:///lib/spark2/*.jar \--queue default --name FlowTest \etl-flow-0.2.0.jar -f hive-flow-test.xml

基于 Spark 的数据分析实践是怎样进行的

接收必须的参数 –f,可选的参数为支持 Kerberos 认证的租户名称principal,和其认证需要的密钥文件。

usage: spark-submit --jars etl-flow.jar --class                    com.yiidata.etl.flow.source.FlowRunner -f,--xml-file <arg>     Flow XML File Path    --keytabFile <arg>   keytab File Path(Huawei)    --krb5File <arg>     krb5 File Path(Huawei)    --principal <arg>    principal for hadoop(Huawei)

SparkSQL Execution Plan

基于 Spark 的数据分析实践是怎样进行的

每个Spark Flow 任务本质上是一连串的 SparkSQL 操作,在 SparkUI SQL tab 里可以看到 flow 中重要的数据表操作。

regiserDataFrameAsTable 是每个 source 和 Transform 的数据在 SparkSQL 中的数据视图,每个视图都会在 SparkContex 中注册一次。

对RegisterDataFrameAsTable的分析

基于 Spark 的数据分析实践是怎样进行的

通过单个 regiserDataFrameAsTable 项进行分析,SparkSQL 并不是把source 的数据立即计算把数据放到内存,而是每次执行 source 时只是生成了一个 Logical Plan,只有遇到需要提交的算子(Action),SparkSQL 才会触发前面所依赖的的 plan 执行。

总结

这是一个开发框架,不是一个成熟的产品,也不是一种架构。他只是基于 SparkSQL 整合了大多数的外部系统,能通过 XML 的模板配置完成数据开发。面向的是理解数据业务但不了解 Spark 的数据开发人员。整个框架完成了大多数的外部系统对接,开发者只需要使用 type 获得数据,完成数据开发后通过 target 回写到目标系统中。整个过程基本无须程序开发,除非当前的 SQL 函数无法满足使用的情况下,需要自行开发一下特定的 UDF。因此本框架在对 SparkSQL 做了二次开发基础上,大大简化了 Spark 的开发,可降低了开发者使用难度。

精选提问:

问1:和Fink平台有什么优势么?

答:Flink 应该对标 Spark Streaming 的解决方案,是另一种可选流数据引擎。Flink 也采用了 Scala 语言,内部原理和操作数据方式颇有相似之处,是 SparkStreaming 之外流数据处理一种选型。基于 SparkSQL Flow 的架构主要侧重批量数据分析,非实时 ETL 方面。

问2:这些应该是源数据库吧,请问目标数据库支持哪些?

答:目前的实现目标数据基本支持所有的源。

问3:你们产品是软件开发平台,spark和你们开发平台啥关系?

答:普元针对部分成熟场景提供了一些开发平台和工具,也在参与了一些大数据项目建设。对于大规模数据的数据报表,数据质量分析也需要适应大数据的技术场景,Spark 作为Hadoop 内比较成熟的解决方案,因此作为主要的选型工具。在参与部分项目实施过程中,通过对一些开发中的痛点针对性的提取了应用框架。

问4:对于ETL中存在的merge、update的数据匹配、整合处理,Spark SQL Flow有没有好的解决方法?

答:merge 和 update 在数据开发过程不可避免,往往对数据库造成较大压力。大数据场景下不建议逐条对数据做 update 操作,更好的办法是在数据处理阶段通过 join 把结果集在写入目标前准备好,统一一次性写入到目标数据库。查询操作通过换库使用新库,这中操作一般适合数据量比较大,数据更新频率较低的情况。如果目标库是 HBase 或者其他 MPP 类基于列式的数据库,适当的可以更新。但是当每天有 60% 以上的数据都需要更新时,建议还是一次性生成新表。

问5: blink和flink 应该如何选取?

答:blink 是阿里巴巴在 flink 基础上做了部分场景优化(只是部分社区有介绍,并不明确)并且开源,但是考虑到国内这些机构开源往往是没有持久动力的。要看采用 Blink 是否用了比较关键的特性。也有消息说 Blink 和 Flink 会合并,毕竟阿里 Dubbo 前期自己发展,后期还是捐给了 Apache,因此两者合并也是有可能。建议选型 Flink。

问6:etl 同步数据中主要用哪些工具?

答:这个要区分场景。传统数据库之间,可采用日志同步,也有部分成熟的工具;

传统数据库和Hadoop 生态内(HBase,HIVE) 同步可使用 apache sqoop。 SparkSQL Flow 可以作为数据同步的另一种方案,可用在实时性不高的场景。SparkSQL Flow 更侧重大数据工具,偏向数据分析和非实时 ETL。

看完上述内容,你们对基于 Spark 的数据分析实践是怎样进行的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于 Spark 的数据分析实践是怎样进行的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于 Spark 的数据分析实践是怎样进行的

今天就跟大家聊聊有关基于 Spark 的数据分析实践是怎样进行的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。引言:Spark是在借鉴了MapReduce之上发展而来的,继承了其分布
2023-06-02

怎么分析基于Spark的公安大数据实时运维技术实践

怎么分析基于Spark的公安大数据实时运维技术实践,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。公安行业存在数以万计的前后端设备,前端设备包括相机、检测器及感应
2023-06-04

怎样进行mysql数据库的分析

怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条
2023-06-22

基于改进字典的大数据多维分析加速实践

工程化支持[维度组合]方式加速rbm结构, 将能定位唯一粒度实体维度组合以最小组合方式建立, 可有效减少rbm结构数据的数量。节省存储的同时, 也提升查询性能。

如何进行大数据发展趋势和Spark的分析

本篇文章为大家展示了如何进行大数据发展趋势和Spark的分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大数据发展趋势和Spark介绍大数据是随着计算机技术、通信技术、互联网技术的发展而产生的一种
2023-06-02

腾讯基于 LLM 的智能数据分析平台 OlaChat 的落地实践

随着大语言模型(Large Language Models, LLMs)的快速发展,智能分析在商业智能(Business Intelligence, BI)领域的影响日益显著。本节将探讨从传统 BI 到智能 BI 的过渡过程,分析这一转型所

基于C++的数据结构实例分析

本篇内容介绍了“基于C++的数据结构实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据结构通常情况下,精心选择的数据结构可以带来更高
2023-07-02

基于图数据库的元数据血缘关系分析技术研究与实践

图数据库是近年来成长最快的数据库分类,在关系存储上具有的巨大的优势使其得到各行各业的广泛关注。本文将分享基于图数据库对元数据血缘关系进行的研究和实践,希望读者通过本文可以对相关知识及其在企业的实际应用有更进一步了的了解。

python数据分析入门是怎样的

这篇文章将为大家详细讲解有关python数据分析入门是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 随着Python自身功能的完善以及生态系统的扩展,Python在Web开发、网络爬
2023-06-02

Python数据分析过程是怎样的

这篇文章主要介绍“Python数据分析过程是怎样的”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python数据分析过程是怎样的”文章能帮助大家解决问题。一、需求介绍该需求主要是分析某一种数据的历史
2023-06-26

Facebook是如何对大数据进行分析的

这篇文章主要介绍“Facebook是如何对大数据进行分析的”,在日常操作中,相信很多人在Facebook是如何对大数据进行分析的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Facebook是如何对大数据进行
2023-06-10

Kylin是基于哪种技术实现的多维OLAP数据分析

Kylin是基于Apache Hadoop和Apache Spark技术实现的多维OLAP数据分析引擎。Kylin使用了Hadoop的HDFS存储数据,利用Spark进行计算和处理,以支持快速、高效的多维数据分析。Kylin还提供了与Hiv
Kylin是基于哪种技术实现的多维OLAP数据分析
2024-03-06

日均PB级数据分析,B站基于Iceberg的湖仓一体架构实践

本文主要介绍为了应对以上挑战,我们在湖仓一体方向上的一些探索和实践。
日志数据2024-12-13

对Python进行数据分析_关于Package的安装问题

一、为什么要使用Python进行数据分析? python拥有一个巨大的活跃的科学计算社区,拥有不断改良的库,能够轻松的集成C,C++,Fortran代码(Cython项目),可以同时用于研究和原型的构建以及生产系统的构建。 二、Python
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录