scala知識點(一)

2021-09-07 06:20:01 字數 2626 閱讀 8205

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 的函式,

1

def 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,...