spark

Tachyon

Tachyon在Spark中的作用(Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks 论文阅读翻译) 摘要: Tachyon是一种分布式文件系统,可以借助集群计算框架使得数据以内存的速度进行共享。当今的缓存技术优化了read过程,但是,write过程因为需要容错机制,就需要通过网络或者是磁盘进行复制操作。Tachyon通过将“血统”技术引入到存储层进而消除了这个瓶颈。创建一个长期的以“血统机制”为基础的存储系统的关键挑战是失败情况发生的时候及时地进行数据恢复。Tachyon通过引入一种检查点的算法来解决这个问题,这种方法保证了恢复过程的有限开销以及通过资源调度器下进行计算所需要的资源获取策略。我们的评审展示了Tachyon的write性能超过HDFS达到100X,也将现实工作流的端到端的负载提升了4X。

(补充): Tachyon是Spark生态系统内快速崛起的一个新项目。 本质上, Tachyon是个分布式的内存文件系统, 它在减轻Spark内存压力的同时,也赋予了Spark内存快速大量数据读写的能力。Tachyon把内存存储的功能从Spark中分离出来, 使Spark可以更专注计算的本身, 以求通过更细的分工达到更高的执行效率。 Spark平台具体问题主要有以下几个:

阅读全文

ZooKeeper实现配置同步

应用项目中都会有一些配置信息,这些配置信息数据量少,一般会保存到内存、文件或者数据库,有时候需要动态更新。当需要在多个应用服务器中修改这些配置文件时,需要做到快速、简单、不停止应用服务器的方式修改并同步配置信息到所有应用中去。本篇文章就是介绍如何使用ZooKeeper来实现配置的动态同步。

阅读全文

Tachyon

Tachyon是分布式文件系统,也就是说Tachyon实现了文件的存储结构,比如inode节点,数据block,以及文件查询的API,比如某个文件在哪个block上面,并且能以文件流的形式对数据进行读写,可以理解为这个是和NTFS、EXT4这些进行比较的,只是Tacyon的数据都放在内存中,不在硬盘中,快快快!而Redis就是个内存数据库,是的,是个数据库,数据库是构建在存储系统之上的,Redis用了内存和文件系统,和Tachyon不在一个层次上。Redis和Tachyon都是可以作为分布式cache层对系统进行加速,唯一不同在于Redis是kv接口,Tachyon是文件系统接口

阅读全文

sklearn

keras是python中比较流行的深度学习库,但是keras本身关注的是深度学习。而python中的scikit-learn库是建立在Scipy上的,有着比较有效的数值计算能力。sklearn是一个具有全特征的通用性的机器学习库,它提供了很多在深度学习中可以用到的工具。

阅读全文

二项逻辑斯蒂回归模型

Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。

阅读全文

导入第三方依赖到shell

import SparkContext 这是spark下面已经有这个jar包的存在了 spark-shell下面包含所有的spark和java的依赖 但是对于第三代jar包,需要先将第三方依赖(jar包)导入到spark-shell下面才行 spark-shell –jars /home/wangtuntun/下载/nscala-time_2.10-2.12.0.jar 如果需要导入多个依赖,之间用逗号隔开 前提要配置spark-shell到环境变量

阅读全文

spark on hive

$cp hive/hive/conf/hive-site.xml spark/spark/conf/ 启动hive 启动spark

阅读全文

scala maven 版本冲突问题解决

scalatest_2.10-1.9.1.jar of core build path is cross-compiled with an incompatible version of Scala (2.10.0)

阅读全文

Eclipse中操作Hive、HDFS、spark时的jar包列表

<img src="https://xiazemin.github.io/MyBlog/img/hivejar.pnghdfsjar"/>

	<img src="https://xiazemin.github.io/MyBlog/img/hdfsjar.png"/> 右击“SaprkScala”工程,选择“Properties”,在弹出的框中,按照下图所示,依次选择“Java Build Path” –>“Libraties” –>“Add External JARs…”,导入文章“Apache Spark:将Spark部署到Hadoop 2.2.0上”中给出的 assembly/target/scala-2.9.3/目录下的spark-assembly-0.8.1-incubating- hadoop2.2.0.jar
阅读全文

Eclipse+maven+scala+spark环境搭建

1.安装Scala-IDE 在Eclipse中开发Scala程序需要有scala插件,我们现在安装scala插件 2.安装m2e-scala插件 m2e-scala用来支持scala开发中对maven的一些定制功能。通过eclipse的Install New Software安装。 安装过程 1.Help->Install New Software 2.输入m2e-scala下载的url 具体URL为http://alchim31.free.fr/m2e-scala/update-site/ 3.安装完成后,可在Help->Installation Details中查看 4.添加远程的原型或模板目录 Catalog file:http://repo1.maven.org/maven2/archetype-catalog.xml Description:Remote Catalog Scala 5、出现过mvn连不上公共库的问题; 解决方法:vi eclipse.ini add : -vmargs -Djava.net.preferIPv4Stack=true

阅读全文

maven

1.1 常用的mvn命令 mvn archetype:create 创建 Maven 项目 mvn compile 编译主程序源代码,不会编译test目录的源代码。第一次运行时,会下载相关的依赖包,可能会比较费时 mvn test-compile 编译测试代码,compile之后会生成target文件夹,主程序编译在classes下面,测试程序放在test-classes下 mvn test 运行应用程序中的单元测试 mvn site 生成项目相关信息的网站 mvn clean 清除目标目录中的生成结果 mvn package 依据项目生成 jar 文件,打包之前会进行编译,测试 mvn install在本地 Repository 中安装 jar。 mvn eclipse:eclipse 生成 Eclipse 项目文件及包引用定义 mvn deploy 在整合或者发布环境下执行,将最终版本的包拷贝到远程 的repository,使得其他的开发者或者工程可以共享。 一些高级功能命令 跳过测试类 : -Dmaven.test.skip=true 下载jar包源码: -DdownloadSource=true 下载javadocs: -DdownloadJavadocs=true 2.1 编写POM 就像Make的Makefile、Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model),项目对象模型定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。现在先为HelloWorld项目编写一个最简单的pom. xml, XML头

阅读全文

随机森林

1 什么是随机森林?   作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。最初,我是在参加校外竞赛时接触到随机森林算法的。最近几年的国内外大赛,包括2013年百度校园电影推荐系统大赛、2014年阿里巴巴天池大数据竞赛以及Kaggle数据科学竞赛,参赛者对随机森林的使用占有相当高的比例。此外,据我的个人了解来看,一大部分成功进入答辩的队伍也都选择了Random Forest 或者 GBDT 算法。所以可以看出,Random Forest在准确率方面还是相当有优势的。

阅读全文

svm

阅读全文

信息熵

熵定义如下: 变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。香农不是用钱,而是用 “比特”(bit)这个概念来度量信息量。 信息量的比特数和所有可能情况的对数函数 log 有关。(二进制位数)常用的汉字(一级二级国标)大约有 7000 字。假如每个字等概率,那么我们大约需要 13 个比特(即 13 位二进制数)表示一个汉字。

阅读全文

Zookeeper与Paxos

 Zookeeper是一个开源的分布式协调服务,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些列简单的接口提供给用户使用。其是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/发布、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。其可以保证如下分布式一致性特性。

阅读全文

比较raft ,basic paxos以及multi-paxos

深入浅出的来讲清楚这些协议的两个问题:

阅读全文

Chubby与Paxos

Chubby是一个面向松耦合分布式系统的锁服务,GFS(Google File System)和Big Table等大型系统都是用它来解决分布式协作、元数据存储和Master选举等一些列与分布式锁服务相关的问题。Chubby的底层一致性实现就是以Paxos算法为基础,Chubby提供了粗粒度的分布式锁服务,开发人员直接调用Chubby的锁服务接口即可实现分布式系统中多个进程之间粗粒度的同控制,从而保证分布式数据的一致性。

阅读全文

Paxos

使用Basic-Paxos协议的日志同步与恢复 在保证数据安全的基础上,保持服务的持续可用,是核心业务对底层数据存储系统的基本要求。业界常见MySQL/Oracle的1主N备的方案面临的问题是“最大可用(Maximum Availability)”和“最大保护(Maximum Protection)”模式间的艰难抉择,其中“最大可用”模式,表示主机尽力将数据同步到备机之后才返回成功,如果备机宕机或网络中断那么主机则单独提供服务,这意味着主备都宕机情况下可能的数据丢失;“最大保护”模式,表示主机一定要将数据同步到备机后才能返回成功,则意味着在任意备机宕机或网络中断情况下主机不得不停服务等待备机或网络恢复。可见传统主备方式下,如果要求数据不丢,那么基本放弃了服务的持续可用能力。 基于Paxos协议的数据同步与传统主备方式最大的区别在与Paxos只需任意超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失。本文不再分析Paxos协议本身(参考原始论文,以及这篇比较通俗的分析http://mp.weixin.qq.com/s?__biz=MjM5MDg2NjIyMA==&mid=203607654&idx=1&sn=bfe71374fbca7ec5adf31bd3500ab95a&key=8ea74966bf01cfb6684dc066454e04bb5194d780db67f87b55480b52800238c2dfae323218ee8645f0c094e607ea7e6f&ascene=1&uin=MjA1MDk3Njk1&devicetype=webwx&version=70000001&pass_ticket=2ivcW%2FcENyzkz%2FGjIaPDdMzzf%2Bberd36%2FR3FYecikmo%3D ),而是基于Paxos协议,讨论一种在多副本上持久化数据的高可用方案。需要注意的是,本方案不考虑运行性能,只是为了帮助说清协议的工程实现。 我们将数据持久化的需求抽象为:在N个server的机群上,持久化数据库或者文件系统的操作日志,并且为每条日志分配连续递增的logID,我们允许多个客户端并发的向机群内的任意机器发送日志同步请求。对于高可用的需求为:在N个server中只要有超过半数的server(majority)正常服务,并且相互通信正常,那么这个机器就可以持续的提供日志持久化和查询服务。 将每条日志的持久化流程都看作一个“Paxos Instance”,不同的logID代表不同的Paxos Instance形成的“决议(decision)”。即每一个logID标识着一轮完整paxos协议流程的执行,最后形成decision。机群内的每个server同时作为paxos的acceptor和proposer。 获取LogID

阅读全文

sbt

SBT = (not so) Simple Build Tool,是scala的构建工具,与java的maven地位相同。其设计宗旨是让简单的项目可以简单的配置,而复杂的项目可以复杂的配置。。。 sbt项目的目录规约 和maven一样,sbt有约定了一个通用的目录结构,使用约定的结构会使后面的工作简单很多。 base/
build.sbt //构建配置文件 /project //也是构建配置的一部分 /build.scala //高级配置,可选 /src/ /main /scala /java /resources /test /scala /java /resources base代表项目的根目录 项目配置可以在build.sbt文件里定义,也可以在base/project/build.scala文件里定义,一般情况下build.sbt就已经足够,除非多工程项目或者需要很多特殊定义的项目 常用命令 在我读完sbt的getting started文档之前,我也经常有疑问:为什么scala不沿用maven,而要搞出sbt这么个(not so simple) Simple Build Tool ? 在读完文档,并实际操作后,我现在感觉确实是物有所值的。 checkout 我的sbtTemple项目后,进入命令行,进入到项目根目录,输入sbt回车进入sbt交互模式 sbt有哪些命令可用?输入help命令查询,即会列出一堆可用的命令,比如exit,reload等,不知道某个命令的作用?help 命令名,比如输入help exit显示exit命令的作用。 列出的命令里并没有compile,test等常用的命令?因为那些不是sbt的命令而是当前工程的task. 输入 tasks命令,就可以看见 compile,test,package等等任务的说明了。 想查看项目的配置?用show命令,输入show name,看当前项目的名字,输入show libraryDependencies看当前项目依赖的库,libraryDependencies太长记不住?输入lib后按tab键! 交互窗口是有tab提示的!输入help show,你可以看到show命令的作用是显示配置的值,如果show之后跟的是任务,则执行该任务并显示任务执行的结果。 你可以试试show compile看什么结果,如果你不想执行compile,而是想看命令的说明,请用inspect命令,inspect命令比较复杂,执行后输出的结果也比较复杂,具体这个命令的作用是什么请help inspect, 不过得等理解了build definition的含义后才能看懂help说的是什么。。。 常用的任务则有compile, test, run,package,doc等,请顾名思义或自行help之。另外这些任务常常还有些变种,比如package-doc,package-src等,用tasks命令查看任务的列表,必有一款适合您 有一个强大的任务不得不特别拎出来说一下:console 输入console回车,会在当前会话内启动一个REPL,不要告诉我你不知道REPL是scala解释器的意思。。。就是你在命令行下输入scala回车后进入的那个交互界面。 强大的是,sbt会加载你的项目依赖的全部jar包和你自己的代码! 你可以在这个解释器里实验你的半成品。 我的模板工程里有一个sample/Account.scala文件,十几行很简单的代码,你可以看一下,然后在console窗口里玩弄Account类和Account伴生对象. 不过别忘了先import sample._ 因为依赖的jar包也都被加载了,所以对于那些你可能还不熟悉的第三方库,你有可以在console里玩个痛快!这功能很给力,谁用谁知道。 顺便在提一下,sbt命令有3种执行模式: 1、交互式,即上文所描述的 2、批处理式,即在命令行下输入sbt 命令名来执行,比如sbt compile就会编译代码,而不进入交互模式 3、连绵不绝式,在命令名前加上~号,即会进入连绵不绝模式,比如~compile,会编译当前代码,然后监听代码改变,每当你编辑了代码并保存后,sbt就会自动编译代码,~test也一样,当你修改代码后自动编译并运行单元测试。按回车键可退出此模式。 build definition释义 你前面应该试过show name和show libraryDependencies了吧?show出来的结果就是来自你的build.sbt文件,也就是build definition了。打开build.sbt就可以看到name := “sbt11template” 还有其他的一堆xxx := xxxx,很显然的,这就是个key-value pair, sbt就是读取配置文件并构建一个key-value的map. 但是在build.sbt里面并非key := value, 而是key := expression. 文件里的每一行其实是一句scala语句,不行你可以试试把 name := “sbt11template” 改成 name := {“sbt11template”.toUpperCase} 然后reload, 再show name,你会看到变成大写的SBT11TEMPLATE :=是最常用的方法,其作用就是将key设置成expression的值,相同的key如果被多次赋值,则后面的值会覆盖掉前面的值。适用于简单类型的key,比如name,version等。 其他的常用方法有 +=,将值添加进现有值里,适用于集合类型的key,比如libraryDependencies ++=,将一个集合值加入当前集合里.~=将key的当前值传给你的函数,然后将函数结果作为新值,比如你可以在name := xxx后面再来一句 name ~= { _. toUpperCase },一样是把name变成大写 «= 将另一个key的值赋给当前key,比如auther «= name ,这个方法还有个高级用法,你可以组合多个其他key的值,赋给当前key,用文档里的例子 name «= (name, organization, version) { (n, o, v) => “project “ + n + “ from “ + o + “ version “ + v } 还有适用于集合类型的版本 <+= 和 <++= 这些语法的官方文档在此https://github.com/harrah/xsbt/wiki/Getting-Started-More-About-Settings 依赖管理 对于不打算通过官方repository管理的第三方库,在项目目录下建个lib目录,把jar包扔进去就行了。 希望sbt待为管理的则在build.sbt里用下面的语法加入 libraryDependencies += groupID % artifactID % revision % configuration % configuration是可选的,表示某依赖库只在特定配置中需要,比如模板项目里的”org.specs2” %% “specs2” % “1.7.1” % “test” 是单元测试框架,只在测试时需要。 如果你视力好,会看到其中有个 %%,而不是一个%,这表示要求sbt寻找用当前你配置的scala版本编译出来的jar包,这是因为scala不同版本编译出来的结果会不兼容(悲剧),希望以后scala社区会解决这不兼容的问题。。。 对于依赖的java语言写的库的jar包,就没这问题了,比如libraryDependencies += “org.slf4j” % “slf4j-api” % “1.6.4” 就不需要%%了 配置好依赖后,运行sbt update,sbt会自动到maven库和scala官方库里去找这些jar包并下载到你的用户目录的.ivy2目录里面,如果你不同的项目用了相同的库,则sbt下载一次就够了。 如果你希望sbt从你自己配置的repository里下载,使用这个语法: resolvers += name at location 比如 resolvers += “Scala-Tools Maven2 Snapshots Repository” at “http://scala-tools.org/repo-snapshots” 所有的一切都是通过key类配置的,key 的列表在http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html 慢慢看吧。。。 sbt插件 现有的sbt插件的列表在https://github.com/harrah/xsbt/wiki/sbt-0.10-plugins-list 安装的方法各有不同,请自己查阅 我的项目模板里已经配置了sbteclipse插件,运行sbt eclipse或在交互模式下输入eclipse回车即会生成相应的eclipse项目文件,然后你就可以在eclipse里用import / existing projects into workspace来导入了。 添加依赖这个简单的解析器对于这点输入内容是可以正常工作的,但是我们还需要加入测试代码并且对它进行一些改造。首先要做的就是把specs测试库以及一个真正的JSON解析器加入到我们的工程里来。为了达到这个目标,我们需要在默认的工程结构上进行改造,然后创建项目。把下面的内容添加到project/build/SampleProject.scala里:import sbt._class SampleProject(info: ProjectInfo) extends DefaultProject(info) { val jackson = “org.codehaus.jackson” % “jackson-core-asl” % “1.6.1” val specs = “org.scala-tools.testing” % “specs_2.8.0” % “1.6.5” % “test” } 常用命令actions – 显示对当前工程可用的命令 update – 下载依赖 compile – 编译代码 test – 运行测试代码 package – 创建一个可发布的jar包 publish-local – 把构建出来的jar包安装到本地的ivy缓存 publish – 把jar包发布到远程仓库(如果配置了的话) 更多命令test-failed – 运行失败的spec test-quick – 运行所有失败的以及/或者是由依赖更新的spec clean-cache – 清除所有的sbt缓存。类似于sbt的clean命令 clean-lib – 删除lib_managed下的所有内容sbt结构说明基础目录 在 sbt 的术语里,“基础目录”是包含项目的目录。所以,如果你创建了一个和 Hello, World 一样的项目hello ,包含 hello/build.sbt 和 hello/hw.scala, hello 就是基础目录。源代码 源代码可以像 hello/hw.scala 一样的放在项目的基础目录中。然而,大多数人不会在真实的项目中这样做,因为太杂乱了。 sbt 和 Maven 的默认的源文件的目录结构是一样的(所有的路径都是相对于基础目录的):src/ main/ resources/

scala/
java/
test/ resources scala/ java/ src/ 中其他的目录将被忽略。而且,所有的隐藏目录也会被忽略。构建产品 构建出来的文件(编译的 classes,打包的 jars,托管文件,caches 和文档)默认写在 target 目录中。交互模式 在你的项目目录下运行 sbt 不跟任何参数:$ sbt 执行 sbt 不跟任何命令行参数将会进入交互模式。交互模式有一个命令行(含有 tab 自动补全功能和历史记录)。例如,在 sbt 命令行里输入 compile:> compile 再次 compile,只需要按向上的方向键,然后回车。 输入 run 来启动程序。 输入 exit 或者 Ctrl+D (Unix)或者 Ctrl+Z (Windows)可以退出交互模式。批处理模式 你也可以用批处理模式来运行 sbt,可以以空格为分隔符指定参数。对于接受参数的 sbt 命令,将命令和参数用引号引起来一起传给 sbt。例如:$ sbt clean compile "testOnly TestA TestB" 在这个例子中,testOnly 有两个参数 TestA 和 TestB。这个命令会按顺序执行(clean, compile, 然后 testOnly)。常用命令 下面是一些非常常用的的 sbt 命令。更加详细的列表请参见 命令行参考。clean 删除所有生成的文件 (在 target 目录下)。 compile 编译源文件(在 src/main/scala 和 src/main/java 目录下)。 test 编译和运行所有测试。 console 进入到一个包含所有编译的文件和所有依赖的 classpath 的 Scala 解析器。输入 :quit, Ctrl+D (Unix),或者 Ctrl+Z (Windows) 返回到 sbt。 run <参数>* 在和 sbt 所处的同一个虚拟机上执行项目的 main class。 package 将 src/main/resources 下的文件和 src/main/scala 以及 src/main/java 中编译出来的 class 文件打包成一个 jar 文件。 help <命令> 显示指定的命令的详细帮助信息。如果没有指定命令,会显示所有命令的简介。 reload 重新加载构建定义(build.sbt, project/*.scala, project/*.sbt 这些文件中定义的内容)。在修改了构建定义文件之后需要重新加载。 添加依赖库 有两种方式添加第三方的依赖。一种是将 jar 文件 放入 lib/(非托管的依赖)中,另一种是在build.sbt 中添加托管的依赖,像这样:val derby = "org.apache.derby" % "derby" % "10.4.1.3"lazy val commonSettings = Seq( organization := "com.example", version := "0.1.0", scalaVersion := "2.11.4" )lazy val root = (project in file(".")). settings(commonSettings: _*). settings( name := "hello", libraryDependencies += derby )
阅读全文

maven 安装

https://maven.apache.org/download.cgi?Preferred=http%3A%2F%2Fmirror.bit.edu.cn%2Fapache%2F 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3

阅读全文

figaro mac 安装

$brew install sbt $which sbt /usr/local/bin/sbt $ git clone https://github.com/xiazemin/figaro.git $sbt package [warn] No sbt.version set in project/build.properties, base directory: /Users/didi/figaro/figaro [info] Set current project to figaro (in build file:/Users/didi/figaro/figaro/) [info] Updating {file:/Users/didi/figaro/figaro/}figaro… [info] Done updating. [info] Packaging /Users/didi/figaro/figaro/target/scala-2.12/figaro_2.12-0.1-SNAPSHOT.jar … [info] Done packaging. [success] Total time: 3 s, completed 2017-12-13 13:13:19 操作后会得到一个jar文件 target/scala-2.12/figaro_2.12-0.1-SNAPSHOT.jar 建立一个scala工程将生成的jar包引入 问题: 包无法引入 参考: https://www.cra.com/work/case-studies/figaro 下载编译包 安装到:/Applications/figaro-5.0.0.0-2.11 项目中引入包即可

阅读全文

Kibana

ibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

阅读全文

scala tuple

Scala元组将固定数量的项目组合在一起,以便它们可以作为一个整体传递。 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的。 val t = (1, "hello", Console) val t = new Tuple3(1, "hello", Console) 元组的实际类型取决于它包含的数量和元素以及这些元素的类型。 因此,(99,"Luftballons")的类型是Tuple2 [Int,String]
阅读全文

jupyter 数学公式

阅读全文

jupyter 数学公式

Notebook 文档是由一系列单元(Cell)构成,如何使用Cell?
阅读全文

Jupyter Notebook 添加目录

1. 安装 jupyter_contrib_nbextensions
阅读全文

文字特征提取算法

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布 1.对每一篇文档,从主题分布中抽取一个主题; 2.从上述被抽到的主题所对应的单词分布中抽取一个单词; 3.重复上述过程直至遍历文档中的每一个单词。 先定义一些字母的含义:文档集合D,主题(topic)集合T D中每个文档d看作一个单词序列<w1,w2,...,wn>,wi表示第i个单词,设d有n个单词。(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响) ·D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC),LDA以文档集合D作为输入,希望训练出的两个结果向量(设聚成k个topic,VOC中共包含m个词): ·对每个D中的文档d,对应到不同Topic的概率θd<pt1,...,ptk>,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。 ·对每个T中的topict,生成不同单词的概率φt<pw1,...,pwm>,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topict的VOC中第i个单词的数目,N表示所有对应到topict的单词总数。 LDA的核心公式如下: p(w|d)=p(w|t)*p(t|d) 直观的看这个公式,就是以Topic作为中间层,可以通过当前的θd和φt给出了文档d中出现单词w的概率。其中p(t|d)利用θd计算得到,p(w|t)利用φt计算得到。 实际上,利用当前的θd和φt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w|d),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响θd和φt。
Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。Word2Vec模型中,主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word。

Skip-Gram模型的基础形式非常简单,为了更清楚地解释模型,我们先从最一般的基础模型来看Word2Vec(下文中所有的Word2Vec都是指Skip-Gram模型)。

阅读全文

sparl_ml_pipline

inspired by the scikit-learn project.
DataFrame: This ML API uses DataFrame from Spark SQL as an ML dataset, which can hold a variety of data types. E.g., a DataFrame could have different columns storing text, feature vectors, true labels, and predictions.
Transformer: A Transformer is an algorithm which can transform one DataFrame into another DataFrame. E.g., an ML model is a Transformer which transforms a DataFrame with features into a DataFrame with predictions.
Estimator: An Estimator is an algorithm which can be fit on a DataFrame to produce a Transformer. E.g., a learning algorithm is an Estimator which trains on a DataFrame and produces a model.Technically, an Estimator implements a method fit(), which accepts a DataFrame and produces a Model, which is a Transformer.
Pipeline: A Pipeline chains multiple Transformers and Estimators together to specify an ML workflow.
Parameter: All Transformers and Estimators now share a common API for specifying parameters. 参考:http://spark.apache.org/docs/latest/ml-pipeline.html
一句话概括:管道(Pipeline)是运用数据(DataFrame)训练算法模型(Estimator)调整参数(Parameter)得到一个最优的算法模型(Transformer),转换数据(DataFrame)的流程。 For Transformer stages, the transform() method is called on the DataFrame. For Estimator stages, the fit() method is called to produce a Transformer (which becomes part of the PipelineModel, or fitted Pipeline), and that Transformer’s transform() method is called on the DataFrame.
阅读全文

spark_memory

在 spark-env.sh 中添加:

阅读全文

spark toDF 失败原因总结

错误提示 value toDF is not a member of org.apache.spark.rdd.RDD[(org.apache.spark.ml.

阅读全文

spark_start问题原因及解决办法

:14: error: not found: value spark import spark.implicits._ ^ :14: error: not found: value spark import spark.sql ^ scala> var rdd = sc.parallelize(1 to 10) :39: error: not found: value sc var rdd = sc.parallelize(1 to 10) 日志: Caused by: java.lang.RuntimeException: java.net.ConnectException: Call From localhost/127.0.0.1 to localhost:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
阅读全文

spark_rdd创建转换

RDD创建方式 1)从Hadoop文件系统(如HDFS、Hive、HBase)输入创建。 2)从父RDD转换得到新RDD。 3)通过parallelize或makeRDD将单机数据创建为分布式RDD。 4)基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流创建。

阅读全文

spark的ML和MLLib两个包区别和联系

ML的API是面向Dataset的(Dataframe是Dataset的子集,也就是Dataset[Row]), mllib是面对RDD的。Dataset和RDD有啥不一样呢?Dataset的底端是RDD。Dataset对RDD进行了更深一层的优化,比如说有sql语言类似的黑魔法,Dataset支持静态类型分析所以在compile time就能报错,各种combinators(map,foreach等)性能会更好

阅读全文

RDD/Dataset/DataFrame互转

1.RDD -> Dataset val ds = rdd.toDS()

阅读全文

dataSet和dataFrame的创建方法

Spark创建DataFrame的三种方法 跟关系数据库的表(Table)一样,DataFrame是Spark中对带模式(schema)行列数据的抽象。DateFrame广泛应用于使用SQL处理大数据的各种场景。

阅读全文

scala_partion_function

从使用case语句构造匿名函数谈起

阅读全文

cut

数据处理常用命令: $ cat 3.txt | cut -d ‘ ‘ -f 1 | sed -e ‘s/^/"/’ | sed -e ‘s/$/",/’

阅读全文

akka_sbt_eclipse

akka项目编译上有两种方法: 第一、 用sbt ,这个是akka 官方推荐的方法,可以用sbt生成Eclipsse项目,然后导入到Eclipse里面,可以运行。 但是我的编译还是通过sbt 命令行的方式来做的。 如果大家有好的方法,请指正。 sbt的安装方法参考:http://www.scala-sbt.org/download.html how to write a scala file , build and run with sbt. http://www.scala-sbt.org/0.13/tutorial/Hello.html akka:http://akka.io/ scala for eclipse IDE bundle : http://scala-ide.org/ (也推荐这个集成开发工具,内含编译所需要的akka actor 和 scala library)

阅读全文

FunSuite

参考wiki:http://www.scalatest.org/getting_started_with_fun_suite

阅读全文

spark基本概念

我们知道Spark总是以集群的方式运行的,Standalone的部署方式是集群方式中最为精简的一种(另外的是Mesos和Yarn)。Standalone模式中,资源调度是自己实现的,是MS架构的集群模式,故存在单点故障问题。 下面提出几个问题并解决: 1、Standalone部署方式下包含哪些节点?

阅读全文

Actor模型原理

1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用Actors模型进行并发编程可以很好地避免这些问题,Actor由状态(state)、行为(Behavior)和邮箱(mailBox)三部分组成

阅读全文

Actor系统的实体

在Actor系统中,actor之间具有树形的监管结构,并且actor可以跨多个网络节点进行透明通信。 对于一个Actor而言,其源码中存在Actor,ActorContext,ActorRef等多个概念,它们都是为了描述Actor对象而进行的不同层面的抽象。 我们先给出一个官方的示例图,再对各个概念进行解释。

阅读全文

Actor模型和CSP模型的区别

 Akka/Erlang的actor模型与Go语言的协程Goroutine与通道Channel代表的CSP(Communicating Sequential Processes)模型有什么区别呢?

阅读全文

java_scala

阅读全文

Scala_collection

Scala 集合分为可变的和不可变的集合。

阅读全文

scala_list

一、常用操作符(操作符其实也是函数)

阅读全文

spark-session-context

初始化Spark 一个Spark程序首先必须要做的是创建一个SparkContext对象,这个对象告诉Spark如何访问一个集群。为了创建一个SparkContext,你首先需要构建一个包含了关于你的应用的信息的SparkConf对象。

阅读全文

scala_main_class

解决 错误: 找不到或无法加载主类 SparkTest.SparkSessionTest

阅读全文

alibaba_fast_json

Fastjson是一个Java语言编写的高性能功能完善的JSON库。将解析json的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

阅读全文

spark-kafka

参考文档: https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

阅读全文

spark-rdd

参考书籍 https://aiyanbo.gitbooks.io/spark-programming-guide-zh-cn/content/index.html 每个 Spark 应用程序都由一个驱动程序(driver programe)构成,驱动程序在集群上运行用户的 main 函数来执行各种各样的并行操作(parallel operations)。Spark 的主要抽象是提供一个弹性分布式数据集(RDD resilient distributed dataset),RDD 是指能横跨集群所有节点进行并行计算的分区元素集合。RDD 可以从 Hadoop 文件系统中的一个文件中创建而来(或其他 Hadoop 支持的文件系统),或者从一个已有的 Scala 集合转换得到。用户可以要求 Spark 将 RDD 持久化(persist)到内存中,来让它在并行计算中高效地重用。最后,RDD 能从节点失败中自动地恢复过来。 Spark 的第二个抽象是共享变量(shared variables),共享变量能被运行在并行计算中。默认情况下,当 Spark 运行一个并行函数时,这个并行函数会作为一个任务集在不同的节点上运行,它会把函数里使用的每个变量都复制搬运到每个任务中。有时,一个变量需要被共享到交叉任务中或驱动程序和任务之间。Spark 支持 2 种类型的共享变量:广播变量(broadcast variables),用来在所有节点的内存中缓存一个值;累加器(accumulators),仅仅只能执行“添加(added)”操作,例如:记数器(counters)和求和(sums)。

阅读全文

Search

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required