天天看點

pyspark之RDDRDD簡介RDD常用操作

RDD簡介

RDD就是一個不可變的分布式對象集合—彈性分布式資料集(Resilient Distributed Dataset)。每個RDD都被分為多個分區,這些分區運作在叢集中的不同節點上。RDD可以包含任意類型的對象,包括使用者自定義的對象。

RDD常用操作

建立RDD

1.對一個集合進行并行化

x = sc.parallelize([1.0, 0.0, -2.0], 2)
           

2.讀取外部資料集

textFile = sc.textFile(path)
           

轉化操作(轉化操作會形成新的RDD)

針對各個元素的轉化操作

兩個最常用的轉化操作是map()和filter()。轉化操作map()接收一個函數,将這個函數用于RDD中的每個元素,将函數的傳回結果作為結果RDD中對應元素的值。轉化操作filter()接收一個函數,并将RDD中滿足該函數的元素放入新的RDD中傳回。

1.map()

df1=df.select('cpurate','memrate','ser','plr','temp','alldevicenumber','opticalinpower','opticaloutpower','dialingnumber')
df1.show(5)

+-------+-------+---+---+----+---------------+--------------+---------------+-------------+
|cpurate|memrate|ser|plr|temp|alldevicenumber|opticalinpower|opticaloutpower|dialingnumber|
+-------+-------+---+---+----+---------------+--------------+---------------+-------------+
|    2.0|   83.0|0.0|0.0|52.0|              1|         -21.2|            2.0|            0|
|    1.0|   72.0|0.0|0.0|49.0|              2|         -17.0|            2.0|            0|
|    1.0|   68.0|0.0|0.0|37.0|              0|         -22.7|            2.1|            0|
|    1.0|   47.0|0.0|0.0|41.0|              1|         -18.3|            2.2|            0|
|    1.0|   69.0|0.0|0.0|41.0|              1|         -17.5|            2.4|            3|
+-------+-------+---+---+----+---------------+--------------+---------------+-------------+
only showing top 5 rows

#DataFrame.rdd是将DataFrame轉化為一個rdd,rdd中的每個元素是DataFrame中的Row
df_rdd1 = df1.rdd
df_rdd1.take(5)
[Row(cpurate=2.0, memrate=83.0, ser=0.0, plr=0.0, temp=52.0, alldevicenumber=1, opticalinpower=-21.200000762939453, opticaloutpower=2.0, dialingnumber=0), Row(cpurate=1.0, memrate=72.0, ser=0.0, plr=0.0, temp=49.0, alldevicenumber=2, opticalinpower=-17.0, opticaloutpower=2.0, dialingnumber=0), Row(cpurate=1.0, memrate=68.0, ser=0.0, plr=0.0, temp=37.0, alldevicenumber=0, opticalinpower=-22.700000762939453, opticaloutpower=2.0999999046325684, dialingnumber=0), Row(cpurate=1.0, memrate=47.0, ser=0.0, plr=0.0, temp=41.0, alldevicenumber=1, opticalinpower=-18.299999237060547, opticaloutpower=2.200000047683716, dialingnumber=0), Row(cpurate=1.0, memrate=69.0, ser=0.0, plr=0.0, temp=41.0, alldevicenumber=1, opticalinpower=-17.5, opticaloutpower=2.4000000953674316, dialingnumber=3)]

#對RDD(df1.rdd)中的每個元素(df1中的一個Row)提取數值,組成新的元素
df_rdd = df1.rdd.map(lambda row: row[0:])
df_rdd.take(5)
[(2.0, 83.0, 0.0, 0.0, 52.0, 1, -21.200000762939453, 2.0, 0), (1.0, 72.0, 0.0, 0.0, 49.0, 2, -17.0, 2.0, 0), (1.0, 68.0, 0.0, 0.0, 37.0, 0, -22.700000762939453, 2.0999999046325684, 0), (1.0, 47.0, 0.0, 0.0, 41.0, 1, -18.299999237060547, 2.200000047683716, 0), (1.0, 69.0, 0.0, 0.0, 41.0, 1, -17.5, 2.4000000953674316, 3)]
           

行動操作

行動操作有collect()[傳回RDD中的所有元素]、take(n)[從RDD中傳回n個元素]等

繼續閱讀