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修復,那應該就可以了