A. spark rdd 能否知道指定分区数据
科普Spark,Spark是什么,如何使用Spark 1.Spark基于什么算法的分布式计算(很简单) 2.Spark与MapRece不同在什么地方 3.Spark为什么比Hadoop灵活 4.Spark局限是什么 5.什么情况下适合使用Spark
B. spark 自定义分区后大于128m会在一个partition吗
hdfs中的block是分布式存储的最小单元,类似于盛放文件的盒子,一个文件可能要占多个盒子,但一个盒子里的内容只可能来自同一份文件。假设block设置为128M,文件是250M,那么这份文件占3个block(128+128+2)。这样的设计虽然会有一部分磁盘空间的浪费,但是整齐的block大小,便于快速找到、读取对应的内容。(p.s. 考虑到hdfs冗余设计,默认三份拷贝,实际上3*3=9个block的物理空间。)
spark中的partion是弹性分布式数据集RDD的最小单元,RDD是由分布在各个节点上的partion组成的。partion是指的spark在计算过程中,生成的数据在计算空间内最小单元,同一份数据(RDD)的partion大小不一,数量不定,是根据application里的算子和最初读入的数据分块数量决定的,这也是为什么叫“弹性分布式”数据集的原因之一。
总结:
block位于存储空间、partion位于计算空间,
block的大小是固定的、partion大小是不固定的,
block是有冗余的、不会轻易丢失,partion(RDD)没有冗余设计、丢失之后重新计算得到
另外补充几点:
partition也可以有冗余,通过storagelevel来配置;
local或者yarn模式和partition,block概念上没有半毛钱关系,local模式也能操作hdfs,yarn模式也能操作本地文件;
存储上为什么要将空间抽象成块前面的兄台已经叙述了,而且之所以设计成这么大的理由还牵扯到大存储空间中的各种管理、容错等等。那么与之对应的,在并行计算里我们希望降低网络带宽的负荷,所以会对计算做一层计算本地性优化,那么怎样做到这点呢?最简单的逻辑,把计算代码发到数据所在的节点上执行就可以了。那么这样一来,怎样做到并行优化?很简单啦,把一个超大的文件切切切分成一个一个不大不小的块(比如hdfs默认的64M,或者配得再大一点),然后把这些块打散在集群的不同节点上,最后把应用代码跟着数据块走,就能在不同节点上并行计算了。与之相对应的,spark为了利用起内存,对一些中间数据尽可能的用内存访问速度进行读写,所以把这部分管理工作纳入到自己这里(对比一下,经典的hadoop maprece就直接交给hdfs进行管理),可是就算存到内存里,那也得沿着这个思路来啊,不然计算本地化,并行之类的就很混乱了,那好吧,我也引入个概念,就叫partition好了,目的和前面一样。然后突然发现,哎呀我靠,这不得了,不仅能做到这些,既然我把一个超大份的数据都分成一块一块的了,那每一块是不是就能独立分隔开来了?那一个超大份文件,内存完全放不下,完全可以把其中一些块放到内存里,另外一些暂时放到硬盘里嘛,好歹也比纯放到hdfs来得快嘛……于是生活就变得美好了起来。但是要注意的是,计算本地性优化并不是说绝对地把任务只发到数据所在地进行执行,还要考虑到均衡和并发能力的取舍。
C. 为什么spark分区明明设置为3却出现4个分区
你好,Win7的话,打开磁盘管理,在任一盘(最好是C盘以外的)上右键压缩卷,再输入你想创建的另外那个卷的大小,过一下子,最后面多出了一个空白的地方,右键那个空白的地方,新建卷,再根据提示操作,XP要用磁盘工具
D. spark既要根据key分区又要根据value排序怎么办
ass UsridPartitioner(numParts:Int) extends Partitioner{
//覆盖分区数
override def numPartitions: Int = numParts
//覆盖分区号获取函数
override def getPartition(key: Any): Int = {
key.toString.toInt%10
}
}
object Test {
def main(args: Array[String]) {
val conf=new SparkConf()
val sc=new SparkContext(conf)
//模拟5个分区的数据
val data=sc.parallelize(1 to 10,5)
//根据尾号转变为10个分区,分写到10个文件
data.map((_,1)).partitionBy(new UsridPartitioner(10)).sa
E. spark读取kafka数据,之后进行过滤,过滤后计算有多少条数据怎么写
spark读取kafka数据,之后进行过滤,过滤后计算有多少条数据怎么写
前面应该还有个数据生产者,比如flume. flume负责生产数据,发送至kafka。 spark streaming作为消费者,实时的从kafka中获取数据进行计算。 计算结果保存至redis,供实时推荐使用。 flume+kafka+spark+redis是实时数据收集与计算的一套经典架构
F. 如何使用Spark ALS实现协同过滤
1.背景
协同过滤(collaborative filtering)是推荐系统常用的一种方法。cf的主要思想就是找出物品相似度高的归为一类进行推荐。cf又分为icf和ucf。icf指的是item collaborative filtering,是将商品进行分析推荐。同理ucf的u指的是user,他是找出知趣相似的人,进行推荐。通常来讲icf的准确率可能会高一些,通过这次参加天猫大数据比赛,我觉得只有在数据量非常庞大的时候才适合用cf,如果数据量很小,cf的准确率会非常可怜。博主在比赛s1阶段,大概只有几万条数据的时候,尝试了icf,准确率不到百分之一。。。。。
2.常用方法
cf的常用方法有三种,分别是欧式距离法、皮尔逊相关系数法、余弦相似度法。
测试矩阵,行表示三名用户,列表示三个品牌,对品牌的喜爱度按照1~5增加。
(1)欧氏距离法
就是计算每两个点的距离,比如Nike和Sony的相似度。数值越小,表示相似的越高。
[python] view plain print?在CODE上查看代码片派生到我的代码片
def OsDistance(vector1, vector2):
sqDiffVector = vector1-vector2
sqDiffVector=sqDiffVector**2
sqDistances = sqDiffVector.sum()
distance = sqDistances**0.5
return distance
(2)皮尔逊相关系数
两个变量之间的相关系数越高,从一个变量去预测另一个变量的精确度就越高,这是因为相关系数越高,就意味着这两个变量的共变部分越多,所以从其中一个变量的变化就可越多地获知另一个变量的变化。如果两个变量之间的相关系数为1或-1,那么你完全可由变量X去获知变量Y的值。
· 当相关系数为0时,X和Y两变量无关系。
· 当X的值增大,Y也增大,正相关关系,相关系数在0.00与1.00之间
· 当X的值减小,Y也减小,正相关关系,相关系数在0.00与1.00之间
· 当X的值增大,Y减小,负相关关系,相关系数在-1.00与0.00之间
当X的值减小,Y增大,负相关关系,相关系数在-1.00与0.00之间
相关系数的绝对值越大,相关性越强,相关系数越接近于1和-1,相关度越强,相关系数越接近于0,相关度越弱。
clip_image003
在Python中用函数corrcoef实现,具体方法见http//infosec.pku.e.cn/~lz/doc/Numpy_Example_List.htm
(3)余弦相似度
通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的
余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两
个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相
反的方向时,余弦相似度的值为-1。在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相
似度通常用于两个向量的夹角小于90°之内,因此余弦相似度的值为0到1之间。
\mathbf{a}\cdot\mathbf{b}=\left\|\mathbf{a}\right\|\left\|\mathbf{b}\right\|\cos\theta
[python] view plain print?在CODE上查看代码片派生到我的代码片
def cosSim(inA,inB):
num = float(inA.T*inB)
denom = la.norm(inA)*la.norm(inB)
return 0.5+0.5*(num/denom)
G. spark sql 如何分区控制最后输出文件数量
sparksql如何分区控制最后输出文件数量因为Spark内部写文件方式其实调用的都是Hadoop的函数,所以我们也可以通过Spark实现多文件输出。Spark内部没有多文件输出的函数供大家直接调用,我们自己实现这个功能也是很简单的。我们可以通过调用saveAsHadoopFile函数并自定义一个OutputFormat类即可
H. spark中rdd里面怎么过滤单词
rdd.map(_.replaceAll("要过滤的单词", "要替换的版单词")), 把字符权串中药过滤的单词替换为要替换的单词, 要替换的单词可以为空字符串
rdd.filter(!_.contains("要过滤的单词")), 将包含 要过滤的单词的字符串去掉
I. spark 分片和分区有什么意思
rdd作为一个分布式的数据集,是分布在多个worker节点上的。如下图所示,RDD1有五个分区(partition),他们分布在了四个worker nodes 上面,RDD2有三个分区,分布在了三个worker nodes上面。
J. spark rdd 的分区数怎么设定
如果你最终是为了生成目录,建议你使用"样式",生成目录时选择使用样式生成目录。我是在office2007里用的。至于你设置大纲出现出现这样的问题,我也遇到过,我也无法克服。从而能够打开文档。六、创建新的Normal模板Word在Normal.dot模板文件中存储默认能恢复的信息当然也就越多,一般设置为1分钟。经过上面的设置后,所有在发生断电或类试试这样工具--〉internet选项--〉"安全"选项--〉选择自定义级别"低"--〉点重置,再点确定.提供一个临时的解决方法:1、先将这段文字按照你的要求,将其大纲格式设置为"正文"级别。2、在原文的前方,插入一个只有一行和一列的表格,将此段文字置于这个表格中,然(二)从业人员经过专业技术培训并经考核合格;(四)有专职安全管理人员;*:应该是"有安全管理机构和专职安全管理人员",否则:危险物品的生产、经营、储存"安全生产许使用360安全卫士进行一次系统修复扫描,在进行一次IE修复,那应该就可以了