1.drop,dropright,dropwhile
drop: drop(n: int): list[a] 丟棄前n個元素,返回剩下的元素
dropright: dropright(n: int): list[a] 丟棄最後n個元素,返回剩下的元素
dropwhile: dropwhile(p: (a) ⇒ boolean): list[a] 從左向右丟棄元素,直到條件p不成立
1 val nums = list(1,1,1,1,4,4,4,4)2 val left = nums.drop(4) //
list(4,4,4,4)
3 val right = nums.dropright(4) //
list(1,1,1,1)
4 val tailnums = nums.dropwhile( _ == nums.head) //
list(4,4,4,4)
還有更多的操作
2. graphx 圖資料建模和儲存
原文:
(1)背景:簡單分析一下graphx是怎麼為圖資料建模和儲存的。
(2)入口:可以看 graphloader 的函式,
1def edgelistfile(
2sc: sparkcontext,
3path: string,
4 canonicalorientation: boolean = false
,5 numedgepartitions: int = -1,
6 edgestoragelevel: storagelevel =storagelevel.memory_only,
7 vertexstoragelevel: storagelevel =storagelevel.memory_only)
8 : graph[int, int]
path可以是本地路徑(檔案或資料夾),也可以是hdfs路徑,本質上是使用 sc.textfile 來生成hadooprdd的, numedgepartitions 是分割槽數。
graph的儲存是分edgerdd和vertexrdd兩塊,可以分別設定storagelevel。預設是記憶體。
這個函式接受邊檔案,即』1 2』, 『4 1』這樣的點到點的資料對組成的檔案。把這份檔案按分割槽數和儲存level轉化成乙個可以操作的圖。
(3)流程:
以下是**,比較清晰地展現了內部儲存結構。
private[graphx]class edgepartition[
@specialized(char, int, boolean, byte, long, float, double) ed: classtag, vd: classtag](
localsrcids: array[int],
localdstids: array[int],
data: array[ed],
index: graphxprimitivekeyopenhashmap[vertexid, int],
global2local: graphxprimitivekeyopenhashmap[vertexid, int],
local2global: array[vertexid],
vertexattrs: array[vd],
activeset: option[vertexset])
extends serializable {/**
* stores the locations of edge-partition join sites for each vertex attribute in a particular
* vertex partition. this provides routing information for shipping vertex attributes to edge
* partitions. */
private[graphx]
class routingtablepartition(
private val routingtable: array[(array[vertexid], bitset, bitset)]) extends serializable {
(4)graphloader:graphloader是graphx中專門用於圖的載入和生成,最重要的函式就是edgelistfile
(5)illegalargumentexception此異常表明向方法傳遞了乙個不合法或不正確的引數。
(6)graphx提供了connectedcomponents和stronglyconnected-components演算法,使用它們可以快速計算出相應的連通圖
(7)val graph = graphloader.edgelistfile(sc, "/home/spark/spark/graphx/data/followers.txt")//載入邊時頂點是邊上出現的點
(8)val bobsscore = scores.getorelse("bob", 0) 檢查是否包含指定的鍵。
關於Scala的知識點(一)
scala的概念 scala是乙個物件導向和面向函式式的多正規化程式語言,基於 jvm,執行於 j a虛擬機器,相容現有j a程式。在scala程式設計中,每個值都是物件,每個符號都是方法操作 在面向函式中,函式是乙個物件。他跟字串 數值具有同等地位,也就是說函式可以賦值給乙個變數,可以作為方法的引...
scala的一些知識點(一)
函式 val sum x int,y int 方法 def sum x int,y int 定義方法 def m1 x int,f int int f x def m2 f int,int int f 2,3 def m3 f int,int int,x int,y int f x,y 定義函式 v...
scala 元組tuple的幾個知識點
通過下標 n取資料不多說了,下面是幾個比較有意思的知識點 知識點1 tuple 和function 和producct一樣最多隻支援22個元素 比如 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 這樣是沒問題的 但是 0,1,2,3,...