这期内容当中小编将会给大家带来有关大数据中如何分析语言DolphinDB脚本语言,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。开发大数据应用,不仅需要能支撑海量数据的分布式数据库,能高效利用多核多节点的分布式计算框架,更需要一门能与分布式数据库和分布式计算有机融合、高性能易扩展、表达能力强、满足快速开发和建模需要的编程语言。DolphinDB从流行的Python和SQL语言汲取了灵感,设计了大数据处理脚本语言。提到数据库语言,我们很容易想到标准的SQL语言。不同于标准的SQL,DolphinDB编程语言功能齐全,表达能力非常强大,完美支持命令式编程、向量化编程、函数话编程、SQL编程、远程过程调用编程(RPC)和元编程等多种编程范式。DolphinDB编程语言的语法和表达习惯与Python和SQL非常相似,只要对Python和SQL有一定的了解,就能轻松掌握。相对而言,掌握内存时序数据库kdb+的q语言难度要大得多。DolphinDB的编程语言能够满足数据科学家快速开发和建模的需求。DolphinDB语言简洁灵活,表达能力强,大大提高了数据科学家的开发效率。DolphinDB支持向量化计算和分布式计算,具有极快的运行速度。下面将详细介绍DolphinDB编程语言的独特之处。1.命令式编程与主流的脚本语言Python、JS等,还有强类型语言C、C++、Java等一样,DolphinDB也支持命令式编程。命令式编程是指通过执行一条一条的语句,实现最终目标。DolphinDB的命令式编程主要是用作上层模块的处理和调度。在大数据分析中,由于需要处理的数据量非常庞大,如果我们采用命令式编程逐行处理数据,效率会十分低下,性能也会有所下降。因此,我们推荐在DolphinDB中使用其他编程方式来批量处理数据。2.向量化编程跟matlab、R等编程语言一样,DolphinDB也支持向量化编程。前面提到的kdb+数据库的q语言也是向量处理语言,它在复杂的计算上表现出很好的性能,并且效率很高。DolphinDB的编程语言对很多算法都进行了优化,比如对时间序列数据计算滑动窗口指标,大大提高了向量函数的效率。向量化编程通常是把整个向量加载到连续内存中。有时候因为内存碎片,没有找到连续内存,向量就不可用了。DolphinDB针对这个问题,特意提供了big array数据类型。big array可以把物理上不连续的内存块组成逻辑上连续的向量,即使是非常大的向量,也能在DolphinDB中使用,提高了系统的可用性。3.函数化编程DolphinDB支持函数化编程的大部分功能,包括纯函数、自定义函数、函数、高阶函数、部分应用和闭包。DolphinDB内置了400多个函数,涵盖了各种数据类型、数据结构和系统调用。DolphinDB的纯函数特性减少了函数的副作用。在自定义函数时,DolphinDB不能使用函数体外定义的变量。纯函数特性可以大幅度提高代码可读性和软件质量。3.1 自定义函数上面的例子定义一个函数getWorkDays,该函数受一组日期,返回并返回在周一和周五之间的日期。函数的实现采用了向量的过滤功能,也就是接受一个布尔型单目函数用于数据的过滤。3.2 高阶函数下面的一个例子我们使用三个高阶函数pivot、each和cross,干净利落的用三行代码,根据股票日内tick级别的报价数据,计算出两两之间的相关性。3.3 部分应用高阶函数中的函数参数通常对参数有限制,通过部分应用,可以确保参数符合要求。例如,给定一个向量 a = 12 14 18,计算与矩阵中的每一列的相关性。因为要计算矩阵的每一列的相关性,当然可以使 香港云主机用高阶函数each。但是corr函数需要两个参数,而矩阵只提供其中的一个参数,另一个参数必须事先给定,所以部分应用可以解决这个问题。当然我们也可以用for语句来解决这个问题,但代码冗长而低效。部分应用的另一个作用是使函数保持状态。例如,在流计算中,用户通常需要给定一个消息处理函数(message handler),接受一条新的信息,返回一个结果。但是我们希望消息处理函数返回的是迄今为止所有数的平均数。这个问题我们可以通过部分应用来解决。4.SQL编程DolphinDB的编程语言不仅支持标准的SQL,还针对时间序列数据扩展了SQL的功能,如分组计算(context by)、数据透视(pivot by)、窗口函数、asof连接和窗口连接等,更便于分析时间序列数据。单纯的SQL引擎表达能力有限,很难满足更加复杂的数据分析和算法实现,影响开发效率。在DolphinDB中,脚本语言与SQL语言是完全融合在一起的。4.1 SQL与编程语言融合上面的例子,SQL语句的where子句和select子句分别用到了上下文中定义的数组和字典,使得本来需要通过子查询和多表联结来解决的问题,通过简单的hash table解决了。如果SQL涉及到分布式数据库,这些上下文变量会自动序列化到需要的节点。这不仅让代码看上去更简洁,有更好的可读性,而且提升了性能。在大数据分析中,很多数据表关联,即使SQL优化器做了很多优化,也难免带来性能问题。4.2 context by——对面板数据的友好支持DolphinDB提供了类似其他数据库系统的window function——context by。但是与window function相比,context by的语法更简洁,并且没有那么多限制,可以与select或update一起使用。4.3 asof join和window join——对时序数据的友好支持上面的例子中,t2中没有与09:33m、09:34m对应的记录,asof join(aj)会分别取t2中在09:33m、09:34m之前最近时间对应的记录,即取t2中09:31m的记录。上面的例子说明了window join(wj)的用法。wj首先取表p第一行记录,即id=1,month=2018.06M。然后在表s中选择id=1并且month在(2018.06M-3)到(2018.06M-1),即2018.03M到2018.05M之间的记录来计算avg(wage)。因此avg_wage=(4500+6000)/2=5250。如此类推。asof join和window join在金融分析领域有着广泛的应用。一个经典的应用是将交易表和报价表进行关联,计算个股交易成本。详情可以参考使用Window Join快速估计个股交易成本。4.4 SQL其它扩展为了满足大数据分析的要求,DolphinDB对SQL还做了很多扩展。比如,用户的自定义函数无需编译、打包或部署,即可在SQL中使用。又比如DolphinDB支持组合字段(Composite Column),可以将复杂分析函数的多个返回值输出到数据表的一行。5.远程过程调用编程DolphinDB与其他系统相比,在远程过程调用(RPC)上的优势主要体现在两个方面:第一,在DolphinDB中,无论是自定义函数还是内置函数,我们都可以通过远程过程调用发送到其他节点上运行,而其他系统不能远程调用与自定义函数相关的函数。第二,DolphinDB的远程过程调用无需编译或者部署。系统会自动把相关函数定义和所需数据序列化到远程节点。数据科学家或数据分析师在编写与远程过程调用相关的函数时,不需要工程师配合编译和部署,可以直接在线使用,极大地提高了开发和分析效率。下面的例子是使用remoteRun执行远程函数:DolphinDB还提供了与分布式计算相关的函数。mr和imr分别用于开发基于map-reduce和迭代的map-reduce分布式算法。用户只需要指定分布式数据源和定制的核心函数,譬如map函数,reduce函数,final函数等。下面我们先创建一个分布式表,添加一些模拟数据,然后演示开发计算中位数和线性回归的例子。利用自定义的map函数myOLSMap,内置的reudce函数加函数(+),自定义的final函数myOLSFinal,以及内置的map-reduce框架函数mr,快速构建了一个在分布式数据源上运行线性回归的函数myOLSEx。下面这个例子,我们构造一个算法,在分布式数据源上计算一组数据的近似中位数。算法的基本原理是利用bucketCount函数,在每一个节点上分别计算一组bucket内的数据个数,然后把各个节点上的数据累加。这样我们可以找到中位数应该落在哪个区间内。如果这个区间不够小,进一步细分这个区间,直到小于给定的精度要求。中位数的算法需要多次迭代,我们因此使用了迭代计算框架imr。6.元编程DolphinDB支持使用元编程来动态创建表达式,如函数调用的表达式和SQL查询表达式。元编程的一个典型应用是定制报表。用户只需要输入数据表、字段名称和字段格式就能生成报表。具体实现如下:DolphinDB编程语言为数据分析而生,天生具备处理海量数据的能力,功能强大,简单易用。上述就是小编为大家分享的大数据中如何分析语言DolphinDB脚本语言了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注开发云行业资讯频道。
这篇文章给大家介绍如何用python代码实现抽奖助手自动参与抽奖,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。不知道大家用过抽奖助手小程序没?(免费给抽奖助手 香港云主机做个小广告),我在公众号多次用它来发过很多奖品,同时,我每天也会去参…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。