pyspark RDD key value基本運算

2021-09-11 07:36:26 字數 2949 閱讀 8930

from pyspark import sparkcontext,sparkconf

from pyspark.sql import sqlcontext

from pyspark import sparkconf,sparkcontext

url='local'

sc = sparkcontext.getorcreate(conf)

#建立rdd最簡單的方式就是使用sparkcontext的parallelize方法

rdd=sc.parallelize([(3,4),(3,6),(5,6),(1,2)])

#k-v rdd基本轉換運算

rdd=sc.parallelize([(3,4),(3,6),(5,6),(1,2)])

rddrdd.collect()

[(3, 4), (3, 6), (5, 6), (1, 2)]

#獲得key

rdd.keys().collect()

[3, 3, 5, 1]

#獲得values

rdd.values().collect()

[4, 6, 6, 2]

#使用filter運算率先key運算

rdd.filter(lambda keyvalue:keyvalue[0]>3).collect()

#使用filter運算率先key運算

rdd.filter(lambda keyvalue:keyvalue[0]>3).collect()

[(5, 6)]

1

#使用filter運算率先values運算

rdd.filter(lambda keyvalue:keyvalue[1]>3).collect()

[(3, 4), (3, 6), (5, 6)]

#使用mapvalues進行運算

rdd.mapvalues(lambda x:x+100).collect()

[(3, 104), (3, 106), (5, 106), (1, 102)]

#sortbykey從小到大依照key排列

rdd.sortbykey(ascending=true).collect()

[(1, 2), (3, 4), (3, 6), (5, 6)]

#reducebykey (相同的key值,把value相加)

rdd.reducebykey(lambda x,y:x+y).collect()

[(5, 6), (1, 2), (3, 10)]

rdd.collect()

​[(3, 4), (3, 6), (5, 6), (1, 2)]

1rdd.takeordered(1)

[(1, 2)]

00

#多個rdd k-v 轉換計算

rdd1=sc.parallelize([(3,4),(3,6),(5,6),(1,2)])

rdd2=sc.parallelize([(3,100),(1,200)])

#k-v join運算

rdd1.join(rdd2).collect()

[(1, (2, 200)), (3, (4, 100)), (3, (6, 100))]

#left join

rdd1.leftouterjoin(rdd2).collect()

[(1, (2, 200)), (3, (4, 100)), (3, (6, 100)), (5, (6, none))]

#right join

rdd1.rightouterjoin(rdd2).collect()

[(1, (2, 200)), (3, (4, 100)), (3, (6, 100))]

#subtractbykey 會移除相同key的資料

rdd1.subtractbykey(rdd2).collect()

[(5, 6)]

#k-v 動作操作

rdd.first()

(3, 4)

2rdd.take(2)

[(3, 4), (3, 6)]

rdd.collect()

[(3, 4), (3, 6), (5, 6), (1, 2)]

0rdd.first()[0]

3

#計算rdd中每乙個k值的個數

rdd.countbykey()

rdd.countbykey()

defaultdict(int, )

type(rdd.countbykey())

collections.defaultdict

rdd.countbykey().get(3)

rdd.countbykey().get(3)

2

#collectasmap 建立k-v字典

kv=rdd.collectasmap()

kvkv

10kv.get(10)

3kv.get(3)

6rdd.collect()

[(3, 4), (3, 6), (5, 6), (1, 2)]

3kv[3]

63

#k-v lookup

rdd.lookup(3)

[4, 6]

1rdd.lookup(1)

[2]

運維基本概述

下面將it運維管理基礎知識必須要學習或能讓你運維任務加分的技藝稍做簡介。最先我們假定你是乙個公司的it運維經理。須要完成五十臺以上的伺服器和若干雜七雜八的配備,哪些運維人員應該必備的技術?it運維管理基礎知識 一 微軟系統 關於windows的熟識是最基本的。當然,作為乙個運維經理,可不是整天玩個w...

mysql運維2 基本操作

先說一說mysql的啟動 啟動過程 etc init.d mysqld start 檢查埠 檢視程序 使用mysqld啟動其實內部會呼叫mysqld safe指令碼啟動mysql,一般出故障時會直接呼叫mysql safe指令碼啟動mysql,因為可以自己新增引數。多例項用mysqld safe啟動...

Linux 基本運維命令之 head

head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾。1 命令格式 head 引數 檔案 2 命令功能 head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的...