pyspark的使用和操作(基础整理)

转载:原文链接:https://blog.csdn.net/cymy001/article/details/78483723

Spark提供了一个Python_Shell,即pyspark,从而可以以交互的方式使用Python编写Spark程序。
有关Spark的基本架构介绍参考http://blog.csdn.net/cymy001/article/details/78483614;
有关Pyspark的环境配置参考http://blog.csdn.net/cymy001/article/details/78430892。

pyspark里最核心的模块是SparkContext(简称sc),最重要的数据载体是RDD。RDD就像一个NumPy array或者一个Pandas Series,可以视作一个有序的item集合。只不过这些item并不存在driver端的内存里,而是被分割成很多个partitions,每个partition的数据存在集群的executor的内存中。

引入Python中pyspark工作模块
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)
#任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数(比如主节点的URL)。初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。Spark shell会自动初始化一个SparkContext(在Scala和Python下可以,但不支持Java)。
#getOrCreate表明可以视情况新建session或利用已有的session

SparkSession是Spark 2.0引入的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。 在spark的早期版本中,SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用StreamingContext;对于sql,使用sqlContext;对于hive,使用hiveContext。但是随着DataSet和DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点。SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。

初始化RDD的方法
(1)本地内存中已经有一份序列数据(比如python的list),可以通过sc.parallelize去初始化一个RDD。当执行这个操作以后,list中的元素将被自动分块(partitioned),并且把每一块送到集群上的不同机器上。
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

#(a)利用list创建一个RDD;使用sc.parallelize可以把Python list,NumPy array或者Pandas Series,Pandas DataFrame转成Spark RDD。
rdd = sc.parallelize([1,2,3,4,5])
rdd
#Output:ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:480

#(b)getNumPartitions()方法查看list被分成了几部分
rdd.getNumPartitions()
#Output:4

#(c)glom().collect()查看分区状况
rdd.glom().collect()
#Output:[[1], [2], [3], [4, 5]]

在这个例子中,是一个4-core的CPU笔记本;Spark创建了4个executor,然后把数据分成4个块。colloect()方法很危险,数据量上BT文件读入会爆掉内存……

(2)创建RDD的另一个方法是直接把文本读到RDD。文本的每一行都会被当做一个item,不过需要注意的一点是,Spark一般默认给定的路径是指向HDFS的,如果要从本地读取文件的话,给一个file://开头(windows下是以file:\开头)的全局路径。
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

#(a)记录当前pyspark工作环境位置
import os
cwd=os.getcwd()
cwd
#Output:'C:\Users\Yu\0JulyLearn\5weekhadoopspark'

#(b)要读入的文件的全路径
rdd=sc.textFile("file:\\\" + cwd + "\namesyob1880.txt")
rdd
#Output:file:\C:UsersYuJulyLearn5weekhadoopspark amesyob1880.txt MapPartitionsRDD[3] at textFile at NativeMethodAccessorImpl.java:0

#(c)first()方法取读入的rdd数据第一个item
rdd.first()
#Output:'Mary,F,7065'

甚至可以sc.wholeTextFiles读入整个文件夹的所有文件。但是要特别注意,这种读法,RDD中的每个item实际上是一个形如(文件名,文件所有内容)的元组。读入整个文件夹的所有文件。

import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

#记录当前pyspark工作环境位置
import os
cwd=os.getcwd()
cwd
#Output:'C:\Users\Yu\0JulyLearn\5weekhadoopspark'

rdd = sc.wholeTextFiles("file:\\\" + cwd + "\namesyob1880.txt")
rdd
#Output:org.apache.spark.api.java.JavaPairRDD@12bcc15

rdd.first()

Output:
('file:/C:/Users/Yu/0JulyLearn/5weekhadoopspark/names/yob1880.txt',
'Mary,F,7065 Anna,F,2604 Emma,F,2003 Elizabeth,F,1939 Minnie,F,1746 Margaret,F,1578 Ida,F,1472 Alice,F,1414 Bertha,F,1320 Sarah,F,1288 Annie,F,1258 Clara,F,1226 Ella,F,1156 Florence,F,1063 Cora,F,1045 Martha,F,1040 Laura,F,1012 Nellie,F,995 Grace,F,982 Carrie,F,949 Maude,F,858 Mabel,F,808 Bessie,F,796 Jennie,F,793 Gertrude,F,787 Julia,F,783 Hattie,F,769 Edith,F,768 Mattie,F,704 Rose,F,700 Catherine,F,688 Lillian,F,672 Ada,F,652 Lillie,F,647 Helen,F,636 Jessie,F,635 Louise,F,635 Ethel,F,633 Lula,F,621 Myrtle,F,615 Eva,F,614 Frances,F,605 Lena,F,603 Lucy,F,590 Edna,F,588 Maggie,F,582 Pearl,F,569 Daisy,F,564 Fannie,F,560 Josephine,F,544 Dora,F,524 Rosa,F,507 Katherine,F,502 Agnes,F,473 Marie,F,471 Nora,F,471 May,F,462 Mamie,F,436 Blanche,F,427 Stella,F,414 Ellen,F,411 Nancy,F,411 Effie,F,406 Sallie,F,404 Nettie,F,403 Della,F,391 Lizzie,F,388 Flora,F,365 Susie,F,361 Maud,F,345 Mae,F,344 Etta,F,323 Harriet,F,319 Sadie,F,317 Caroline,F,306 Katie,F,303 Lydia,F,302 Elsie,F,301 Kate,F,299 Susan,F,286 Mollie,F,283 Alma,F,277 Addie,F,274 Georgia,F,259 Eliza,F,252 Lulu,F,249 Nannie,F,248 Lottie,F,245 Amanda,F,241 Belle,F,238 Charlotte,F,237 Rebecca,F,236 Ruth,F,234 Viola,F,229 Olive,F,224 Amelia,F,221 Hannah,F,221 Jane,F,215 Virginia,F,213 Emily,F,210 Matilda,F,210 Irene,F,204 Kathryn,F,204 Esther,F,198 Willie,F,192 Henrietta,F,191 Ollie,F,183 Amy,F,167 Rachel,F,166 Sara,F,165 Estella,F,162 Theresa,F,153 Augusta,F,151 Ora,F,149 Pauline,F,144 Josie,F,141 Lola,F,138 Sophia,F,138 Leona,F,137 Anne,F,136 Mildred,F,132 Ann,F,131 Beulah,F,131 Callie,F,131 Lou,F,131 Delia,F,129 Eleanor,F,129 Barbara,F,127 Iva,F,127 Louisa,F,126 Maria,F,125 Mayme,F,124 Evelyn,F,122 Estelle,F,119 Nina,F,119 Betty,F,117 Marion,F,115 Bettie,F,113 Dorothy,F,112 Luella,F,111 Inez,F,106 Lela,F,106 Rosie,F,106 Allie,F,105 Millie,F,105 Janie,F,96 Cornelia,F,94 Victoria,F,93 Ruby,F,92 Winifred,F,92 Alta,F,91 Celia,F,90 Christine,F,89 Beatrice,F,87 Birdie,F,85 Harriett,F,83 Mable,F,83 Myra,F,83 Sophie,F,83 Tillie,F,83 Isabel,F,81 Sylvia,F,81 Carolyn,F,80 Isabelle,F,80 Leila,F,80 Sally,F,80 Ina,F,79 Essie,F,78 Bertie,F,77 Nell,F,77 Alberta,F,76 Katharine,F,76 Lora,F,74 Rena,F,74 Mina,F,73 Rhoda,F,73 Mathilda,F,72 Abbie,F,71 Eula,F,70 Dollie,F,69 Hettie,F,69 Eunice,F,67 Fanny,F,67 Ola,F,67 Lenora,F,66 Adelaide,F,65 Christina,F,65 Lelia,F,65 Nelle,F,65 Sue,F,65 Johanna,F,64 Lilly,F,64 Lucinda,F,63 Minerva,F,63 Lettie,F,62 Roxie,F,62 Cynthia,F,61 Helena,F,60 Hilda,F,60 Hulda,F,60 Bernice,F,59 Genevieve,F,59 Jean,F,59 Cordelia,F,58 Marian,F,56 Francis,F,55 Jeanette,F,55 Adeline,F,54 Gussie,F,54 Leah,F,54 Lois,F,53 Lura,F,53 Mittie,F,53 Hallie,F,51 Isabella,F,50 Olga,F,50 Phoebe,F,50 Teresa,F,50 Hester,F,49 Lida,F,49 Lina,F,49 Winnie,F,49 Claudia,F,48 Marguerite,F,48 Vera,F,48 Cecelia,F,47 Bess,F,46 Emilie,F,46 John,F,46 Rosetta,F,46 Verna,F,46 Myrtie,F,45 Cecilia,F,44 Elva,F,44 Olivia,F,44 Ophelia,F,44 Georgie,F,43 Elnora,F,42 Violet,F,42 Adele,F,41 Lily,F,41 Linnie,F,41 Loretta,F,41 Madge,F,41 Polly,F,41 Virgie,F,41 Eugenia,F,40 Lucile,F,40 Lucille,F,40 Mabelle,F,39 Rosalie,F,39 Kittie,F,38 Meta,F,37 Angie,F,36 Dessie,F,36 Georgiana,F,36 Lila,F,36 Regina,F,36 Selma,F,36 Wilhelmina,F,36 Bridget,F,35 Lilla,F,35 Malinda,F,35 Vina,F,35 Freda,F,34 Gertie,F,34 Jeannette,F,34 Louella,F,34 Mandy,F,34 Roberta,F,34 Cassie,F,33 Corinne,F,33 Ivy,F,33 Melissa,F,33 Lyda,F,32 Naomi,F,32 Norma,F,32 Bell,F,31 Margie,F,31 Nona,F,31 Zella,F,31 Dovie,F,30 Elvira,F,30 Erma,F,30 Irma,F,30 Leota,F,30 William,F,30 Artie,F,29 Blanch,F,29 Charity,F,29 Lorena,F,29 Lucretia,F,29 Orpha,F,29 Alvina,F,28 Annette,F,28 Catharine,F,28 Elma,F,28 Geneva,F,28 Janet,F,28 Lee,F,28 Leora,F,28 Lona,F,28 Miriam,F,28 Zora,F,28 Linda,F,27 Octavia,F,27 Sudie,F,27 Zula,F,27 Adella,F,26 Alpha,F,26 Frieda,F,26 George,F,26 Joanna,F,26 Leonora,F,26 Priscilla,F,26 Tennie,F,26 Angeline,F,25 Docia,F,25 Ettie,F,25 Flossie,F,25 Hanna,F,25 Letha,F,25 Minta,F,25 Retta,F,25 Rosella,F,25 Adah,F,24 Berta,F,24 Elisabeth,F,24 Elise,F,24 Goldie,F,24 Leola,F,24 Margret,F,24 Adaline,F,23 Floy,F,23 Idella,F,23 Juanita,F,23 Lenna,F,23 Lucie,F,23 Missouri,F,23 Nola,F,23 Zoe,F,23 Eda,F,22 Isabell,F,22 James,F,22 Julie,F,22 Letitia,F,22 Madeline,F,22 Malissa,F,22 Mariah,F,22 Pattie,F,22 Vivian,F,22 Almeda,F,21 Aurelia,F,21 Claire,F,21 Dolly,F,21 Hazel,F,21 Jannie,F,21 Kathleen,F,21 Kathrine,F,21 Lavinia,F,21 Marietta,F,21 Melvina,F,21 Ona,F,21 Pinkie,F,21 Samantha,F,21 Susanna,F,21 Chloe,F,20 Donnie,F,20 Elsa,F,20 Gladys,F,20 Matie,F,20 Pearle,F,20 Vesta,F,20 Vinnie,F,20 Antoinette,F,19 Clementine,F,19 Edythe,F,19 Harriette,F,19 Libbie,F,19 Lilian,F,19 Lue,F,19 Lutie,F,19 Magdalena,F,19 Meda,F,19 Rita,F,19 Tena,F,19 Zelma,F,19 Adelia,F,18 Annetta,F,18 Antonia,F,18 Dona,F,18 Elizebeth,F,18 Georgianna,F,18 Gracie,F,18 Iona,F,18 Lessie,F,18 Leta,F,18 Liza,F,18 Mertie,F,18 Molly,F,18 Neva,F,18 Oma,F,18 Alida,F,17 Alva,F,17 Cecile,F,17 Cleo,F,17 Donna,F,17 Ellie,F,17 Ernestine,F,17 Evie,F,17 Frankie,F,17 Helene,F,17 Minna,F,17 Myrta,F,17 Prudence,F,17 Queen,F,17 Rilla,F,17 Savannah,F,17 Tessie,F,17 Tina,F,17 Agatha,F,16 America,F,16 Anita,F,16 Arminta,F,16 Dorothea,F,16 Ira,F,16 Luvenia,F,16 Marjorie,F,16 Maybelle,F,16 Mellie,F,16 Nan,F,16 Pearlie,F,16 Sidney,F,16 Velma,F,16 Clare,F,15 Constance,F,15 Dixie,F,15 Ila,F,15 Iola,F,15 Jimmie,F,15 Louvenia,F,15 Lucia,F,15 Ludie,F,15 Luna,F,15 Metta,F,15 Patsy,F,15 Phebe,F,15 Sophronia,F,15 Adda,F,14 Avis,F,14 Betsy,F,14 Bonnie,F,14 Cecil,F,14 Cordie,F,14 Emmaline,F,14 Ethelyn,F,14 Hortense,F,14 June,F,14 Louie,F,14 Lovie,F,14 Marcella,F,14 Melinda,F,14 Mona,F,14 Odessa,F,14 Veronica,F,14 Aimee,F,13 Annabel,F,13 Ava,F,13 Bella,F,13 Carolina,F,13 Cathrine,F,13 Christena,F,13 Clyde,F,13 Dena,F,13 Dolores,F,13 Eleanore,F,13 Elmira,F,13 Fay,F,13 Frank,F,13 Jenny,F,13 Kizzie,F,13 Lonnie,F,13 Loula,F,13 Magdalene,F,13 Mettie,F,13 Mintie,F,13 Peggy,F,13 Reba,F,13 Serena,F,13 Vida,F,13 Zada,F,13 Abigail,F,12 Celestine,F,12 Celina,F,12 Claudie,F,12 Clemmie,F,12 Connie,F,12 Daisie,F,12 Deborah,F,12 Dessa,F,12 Easter,F,12 Eddie,F,12 Emelia,F,12 Emmie,F,12 Imogene,F,12 India,F,12 Jeanne,F,12 Joan,F,12 Lenore,F,12 Liddie,F,12 Lotta,F,12 Mame,F,12 Nevada,F,12 Rachael,F,12 Sina,F,12 Willa,F,12 Aline,F,11 Beryl,F,11 Charles,F,11 Daisey,F,11 Dorcas,F,11 Edmonia,F,11 Effa,F,11 Eldora,F,11 Eloise,F,11 Emmer,F,11 Era,F,11 Gena,F,11 Henry,F,11 Iris,F,11 Izora,F,11 Lennie,F,11 Lissie,F,11 Mallie,F,11 Malvina,F,11 Mathilde,F,11 Mazie,F,11 Queenie,F,11 Robert,F,11 Rosina,F,11 Salome,F,11 Theodora,F,11 Therese,F,11 Vena,F,11 Wanda,F,11 Wilda,F,11 Altha,F,10 Anastasia,F,10 Besse,F,10 Bird,F,10 Birtie,F,10 Clarissa,F,10 Claude,F,10 Delilah,F,10 Diana,F,10 Emelie,F,10 Erna,F,10 Fern,F,10 Florida,F,10 Frona,F,10 Hilma,F,10 Joseph,F,10 Juliet,F,10 Leonie,F,10 Lugenia,F,10 Mammie,F,10 Manda,F,10 Manerva,F,10 Manie,F,10 Nella,F,10 Paulina,F,10 Philomena,F,10 Rae,F,10 Selina,F,10 Sena,F,10 Theodosia,F,10 Tommie,F,10 Una,F,10 Vernie,F,10 Adela,F,9 Althea,F,9 Amalia,F,9 Amber,F,9 Angelina,F,9 Annabelle,F,9 Anner,F,9 Arie,F,9 Clarice,F,9 Corda,F,9 Corrie,F,9 Dell,F,9 Dellar,F,9 Donie,F,9 Doris,F,9 Elda,F,9 Elinor,F,9 Emeline,F,9 Emilia,F,9 Esta,F,9 Estell,F,9 Etha,F,9 Fred,F,9 Hope,F,9 Indiana,F,9 Ione,F,9 Jettie,F,9 Johnnie,F,9 Josiephine,F,9 Kitty,F,9 Lavina,F,9 Leda,F,9 Letta,F,9 Mahala,F,9 Marcia,F,9 Margarette,F,9 Maudie,F,9 Maye,F,9 Norah,F,9 Oda,F,9 Patty,F,9 Paula,F,9 Permelia,F,9 Rosalia,F,9 Roxanna,F,9 Sula,F,9 Vada,F,9 Winnifred,F,9 Adline,F,8 Almira,F,8 Alvena,F,8 Arizona,F,8 Becky,F,8 Bennie,F,8 Bernadette,F,8 Camille,F,8 Cordia,F,8 Corine,F,8 Dicie,F,8 Dove,F,8 Drusilla,F,8 Elena,F,8 Elenora,F,8 Elmina,F,8 Ethyl,F,8 Evalyn,F,8 Evelina,F,8 Faye,F,8 Huldah,F,8 Idell,F,8 Inga,F,8 Irena,F,8 Jewell,F,8 Kattie,F,8 Lavenia,F,8 Leslie,F,8 Lovina,F,8 Lulie,F,8 Magnolia,F,8 Margeret,F,8 Margery,F,8 Media,F,8 Millicent,F,8 Nena,F,8 Ocie,F,8 Orilla,F,8 Osie,F,8 Pansy,F,8 Ray,F,8 Rosia,F,8 Rowena,F,8 Shirley,F,8 Tabitha,F,8 Thomas,F,8 Verdie,F,8 Walter,F,8 Zetta,F,8 Zoa,F,8 Zona,F,8 Albertina,F,7 Albina,F,7 Alyce,F,7 Amie,F,7 Angela,F,7 Annis,F,7 Carol,F,7 Carra,F,7 Clarence,F,7 Clarinda,F,7 Delphia,F,7 Dillie,F,7 Doshie,F,7 Drucilla,F,7 Etna,F,7 Eugenie,F,7 Eulalia,F,7 Eve,F,7 Felicia,F,7 Florance,F,7 Fronie,F,7 Geraldine,F,7 Gina,F,7 Glenna,F,7 Grayce,F,7 Hedwig,F,7 Jessica,F,7 Jossie,F,7 Katheryn,F,7 Katy,F,7 Lea,F,7 Leanna,F,7 Leitha,F,7 Leone,F,7 Lidie,F,7 Loma,F,7 Lular,F,7 Magdalen,F,7 Maymie,F,7 Minervia,F,7 Muriel,F,7 Neppie,F,7 Olie,F,7 Onie,F,7 Osa,F,7 Otelia,F,7 Paralee,F,7 Patience,F,7 Rella,F,7 Rillie,F,7 Rosanna,F,7 Theo,F,7 Tilda,F,7 Tishie,F,7 Tressa,F,7 Viva,F,7 Yetta,F,7 Zena,F,7 Zola,F,7 Abby,F,6 Aileen,F,6 Alba,F,6 Alda,F,6 Alla,F,6 Alverta,F,6 Ara,F,6 Ardelia,F,6 Ardella,F,6 Arrie,F,6 Arvilla,F,6 Augustine,F,6 Aurora,F,6 Bama,F,6 Bena,F,6 Byrd,F,6 Calla,F,6 Camilla,F,6 Carey,F,6 Carlotta,F,6 Celestia,F,6 Cherry,F,6 Cinda,F,6 Classie,F,6 Claudine,F,6 Clemie,F,6 Clifford,F,6 Clyda,F,6 Creola,F,6 Debbie,F,6 Dee,F,6 Dinah,F,6 Doshia,F,6 Ednah,F,6 Edyth,F,6 Eleanora,F,6 Electa,F,6 Eola,F,6 Erie,F,6 Eudora,F,6 Euphemia,F,6 Evalena,F,6 Evaline,F,6 Faith,F,6 Fidelia,F,6 Freddie,F,6 Golda,F,6 Harry,F,6 Helma,F,6 Hermine,F,6 Hessie,F,6 Ivah,F,6 Janette,F,6 Jennette,F,6 Joella,F,6 Kathryne,F,6 Lacy,F,6 Lanie,F,6 Lauretta,F,6 Leana,F,6 Leatha,F,6 Leo,F,6 Liller,F,6 Lillis,F,6 Louetta,F,6 Madie,F,6 Mai,F,6 Martina,F,6 Maryann,F,6 Melva,F,6 Mena,F,6 Mercedes,F,6 Merle,F,6 Mima,F,6 Minda,F,6 Monica,F,6 Nealie,F,6 Netta,F,6 Nolia,F,6 Nonie,F,6 Odelia,F,6 Ottilie,F,6 Phyllis,F,6 Robbie,F,6 Sabina,F,6 Sada,F,6 Sammie,F,6 Suzanne,F,6 Sybilla,F,6 Thea,F,6 Tressie,F,6 Vallie,F,6 Venie,F,6 Viney,F,6 Wilhelmine,F,6 Winona,F,6 Zelda,F,6 Zilpha,F,6 Adelle,F,5 Adina,F,5 Adrienne,F,5 Albertine,F,5 Alys,F,5 Ana,F,5 Araminta,F,5 Arthur,F,5 Birtha,F,5 Bulah,F,5 Caddie,F,5 Celie,F,5 Charlotta,F,5 Clair,F,5 Concepcion,F,5 Cordella,F,5 Corrine,F,5 Delila,F,5 Delphine,F,5 Dosha,F,5 Edgar,F,5 Elaine,F,5 Elisa,F,5 Ellar,F,5 Elmire,F,5 Elvina,F,5 Ena,F,5 Estie,F,5 Etter,F,5 Fronnie,F,5 Genie,F,5 Georgina,F,5 Glenn,F,5 Gracia,F,5 Guadalupe,F,5 Gwendolyn,F,5 Hassie,F,5 Honora,F,5 Icy,F,5 Isa,F,5 Isadora,F,5 Jesse,F,5 Jewel,F,5 Joe,F,5 Johannah,F,5 Juana,F,5 Judith,F,5 Judy,F,5 Junie,F,5 Lavonia,F,5 Lella,F,5 Lemma,F,5 Letty,F,5 Linna,F,5 Littie,F,5 Lollie,F,5 Lorene,F,5 Louis,F,5 Love,F,5 Lovisa,F,5 Lucina,F,5 Lynn,F,5 Madora,F,5 Mahalia,F,5 Manervia,F,5 Manuela,F,5 Margarett,F,5 Margaretta,F,5 Margarita,F,5 Marilla,F,5 Mignon,F,5 Mozella,F,5 Natalie,F,5 Nelia,F,5 Nolie,F,5 Omie,F,5 Opal,F,5 Ossie,F,5 Ottie,F,5 Ottilia,F,5 Parthenia,F,5 Penelope,F,5 Pinkey,F,5 Pollie,F,5 Rennie,F,5 Reta,F,5 Roena,F,5 Rosalee,F,5 Roseanna,F,5 Ruthie,F,5 Sabra,F,5 Sannie,F,5 Selena,F,5 Sibyl,F,5 Tella,F,5 Tempie,F,5 Tennessee,F,5 Teressa,F,5 Texas,F,5 Theda,F,5 Thelma,F,5 Thursa,F,5 Ula,F,5 Vannie,F,5 Verona,F,5 Vertie,F,5 Wilma,F,5 John,M,9655 William,M,9532 James,M,5927 Charles,M,5348 George,M,5126 Frank,M,3242 Joseph,M,2632 Thomas,M,2534 Henry,M,2444 Robert,M,2415 Edward,M,2364 Harry,M,2152 Walter,M,1755 Arthur,M,1599 Fred,M,1569 Albert,M,1493 Samuel,M,1024 David,M,869 Louis,M,828 Joe,M,731 Charlie,M,730 Clarence,M,730 Richard,M,728 Andrew,M,644 Daniel,M,643 Ernest,M,615 Will,M,588 Jesse,M,569 Oscar,M,544 Lewis,M,517 Peter,M,496 Benjamin,M,490 Frederick,M,483 Willie,M,476 Alfred,M,469 Sam,M,457 Roy,M,440 Herbert,M,424 Jacob,M,404 Tom,M,399 Elmer,M,373 Carl,M,372 Lee,M,361 Howard,M,357 Martin,M,357 Michael,M,354 Bert,M,348 Herman,M,347 Jim,M,345 Francis,M,344 Harvey,M,344 Earl,M,335 Eugene,M,328 Ralph,M,317 Ed,M,310 Claude,M,309 Edwin,M,309 Ben,M,305 Charley,M,305 Paul,M,301 Edgar,M,283 Isaac,M,274 Otto,M,271 Luther,M,260 Lawrence,M,257 Ira,M,249 Patrick,M,248 Guy,M,239 Oliver,M,234 Theodore,M,232 Hugh,M,224 Clyde,M,221 Alexander,M,211 August,M,210 Floyd,M,206 Homer,M,205 Jack,M,204 Leonard,M,200 Horace,M,199 Marion,M,189 Philip,M,186 Allen,M,184 Archie,M,183 Stephen,M,176 Chester,M,168 Willis,M,166 Raymond,M,165 Rufus,M,163 Warren,M,158 Jessie,M,154 Milton,M,149 Alex,M,147 Leo,M,147 Julius,M,143 Ray,M,142 Sidney,M,142 Bernard,M,140 Dan,M,140 Jerry,M,136 Calvin,M,134 Perry,M,134 Dave,M,131 Anthony,M,130 Eddie,M,129 Amos,M,128 Dennis,M,128 Clifford,M,127 Leroy,M,124 Wesley,M,123 Alonzo,M,122 Garfield,M,122 Franklin,M,120 Emil,M,119 Leon,M,118 Nathan,M,114 Harold,M,113 Matthew,M,113 Levi,M,112 Moses,M,111 Everett,M,110 Lester,M,109 Winfield,M,108 Adam,M,104 Lloyd,M,104 Mack,M,104 Fredrick,M,103 Jay,M,103 Jess,M,103 Melvin,M,103 Noah,M,103 Aaron,M,102 Alvin,M,102 Norman,M,102 Gilbert,M,101 Elijah,M,100 Victor,M,100 Gus,M,99 Nelson,M,99 Jasper,M,98 Silas,M,98 Jake,M,96 Christopher,M,95 Mike,M,95 Percy,M,94 Adolph,M,93 Maurice,M,93 Cornelius,M,92 Felix,M,92 Reuben,M,92 Wallace,M,91 Claud,M,90 Roscoe,M,90 Sylvester,M,89 Earnest,M,88 Hiram,M,88 Otis,M,88 Simon,M,88 Willard,M,88 Irvin,M,86 Mark,M,85 Jose,M,84 Wilbur,M,82 Abraham,M,81 Virgil,M,81 Clinton,M,79 Elbert,M,79 Leslie,M,79 Marshall,M,78 Owen,M,78 Wiley,M,78 Anton,M,77 Morris,M,77 Manuel,M,75 Phillip,M,75 Augustus,M,74 Emmett,M,74 Eli,M,73 Nicholas,M,73 Wilson,M,72 Alva,M,70 Harley,M,70 Newton,M,70 Timothy,M,70 Marvin,M,69 Ross,M,69 Curtis,M,68 Edmund,M,67 Jeff,M,66 Elias,M,65 Harrison,M,65 Stanley,M,65 Columbus,M,64 Lon,M,64 Ora,M,64 Ollie,M,63 Pearl,M,62 Russell,M,62 Solomon,M,62 Arch,M,61 Asa,M,60 Clayton,M,60 Enoch,M,60 Irving,M,60 Mathew,M,60 Nathaniel,M,60 Scott,M,60 Hubert,M,59 Lemuel,M,59 Andy,M,58 Ellis,M,58 Emanuel,M,57 Joshua,M,57 Millard,M,56 Vernon,M,56 Wade,M,56 Cyrus,M,54 Miles,M,54 Rudolph,M,54 Sherman,M,54 Austin,M,53 Bill,M,53 Chas,M,53 Lonnie,M,53 Monroe,M,53 Byron,M,52 Edd,M,52 Emery,M,52 Grant,M,52 Jerome,M,52 Max,M,52 Mose,M,52 Steve,M,52 Gordon,M,51 Abe,M,50 Pete,M,50 Chris,M,49 Clark,M,49 Gustave,M,49 Orville,M,49 Lorenzo,M,48 Bruce,M,47 Marcus,M,47 Preston,M,47 Bob,M,46 Dock,M,46 Donald,M,46 Jackson,M,46 Cecil,M,45 Barney,M,44 Delbert,M,44 Edmond,M,44 Anderson,M,43 Christian,M,43 Glenn,M,43 Jefferson,M,43 Luke,M,43 Neal,M,43 Burt,M,42 Ike,M,42 Myron,M,42 Tony,M,42 Conrad,M,41 Joel,M,41 Matt,M,41 Riley,M,41 Vincent,M,41 Emory,M,40 Isaiah,M,40 Nick,M,40 Ezra,M,39 Green,M,39 Juan,M,39 Clifton,M,38 Lucius,M,38 Porter,M,38 Arnold,M,37 Bud,M,37 Jeremiah,M,37 Taylor,M,37 Forrest,M,36 Roland,M,36 Spencer,M,35 Burton,M,34 Don,M,34 Emmet,M,34 Gustav,M,33 Louie,M,33 Morgan,M,33 Ned,M,33 Van,M,33 Ambrose,M,32 Chauncey,M,32 Elisha,M,32 Ferdinand,M,32 General,M,32 Julian,M,32 Kenneth,M,32 Mitchell,M,32 Allie,M,31 Josh,M,31 Judson,M,31 Lyman,M,31 Napoleon,M,31 Pedro,M,31 Berry,M,30 Dewitt,M,30 Ervin,M,30 Forest,M,30 Lynn,M,30 Pink,M,30 Ruben,M,30 Sanford,M,30 Ward,M,30 Douglas,M,29 Ole,M,29 Omer,M,29 Ulysses,M,29 Walker,M,29 Wilbert,M,29 Adelbert,M,28 Benjiman,M,28 Ivan,M,28 Jonas,M,28 Major,M,28 Abner,M,27 Archibald,M,27 Caleb,M,27 Clint,M,27 Dudley,M,27 Granville,M,27 King,M,27 Mary,M,27 Merton,M,27 Antonio,M,26 Bennie,M,26 Carroll,M,26 Freeman,M,26 Josiah,M,26 Milo,M,26 Royal,M,26 Dick,M,25 Earle,M,25 Elza,M,25 Emerson,M,25 Fletcher,M,25 Judge,M,25 Laurence,M,25 Neil,M,25 Roger,M,25 Seth,M,25 Glen,M,24 Hugo,M,24 Jimmie,M,24 Johnnie,M,24 Washington,M,24 Elwood,M,23 Gust,M,23 Harmon,M,23 Jordan,M,23 Simeon,M,23 Wayne,M,23 Wilber,M,23 Clem,M,22 Evan,M,22 Frederic,M,22 Irwin,M,22 Junius,M,22 Lafayette,M,22 Loren,M,22 Madison,M,22 Mason,M,22 Orval,M,22 Abram,M,21 Aubrey,M,21 Elliott,M,21 Hans,M,21 Karl,M,21 Minor,M,21 Wash,M,21 Wilfred,M,21 Allan,M,20 Alphonse,M,20 Dallas,M,20 Dee,M,20 Isiah,M,20 Jason,M,20 Johnny,M,20 Lawson,M,20 Lew,M,20 Micheal,M,20 Orin,M,20 Addison,M,19 Cal,M,19 Erastus,M,19 Francisco,M,19 Hardy,M,19 Lucien,M,19 Randolph,M,19 Stewart,M,19 Vern,M,19 Wilmer,M,19 Zack,M,19 Adrian,M,18 Alvah,M,18 Bertram,M,18 Clay,M,18 Ephraim,M,18 Fritz,M,18 Giles,M,18 Grover,M,18 Harris,M,18 Isom,M,18 Jesus,M,18 Johnie,M,18 Jonathan,M,18 Lucian,M,18 Malcolm,M,18 Merritt,M,18 Otho,M,18 Perley,M,18 Rolla,M,18 Sandy,M,18 Tomas,M,18 Wilford,M,18 Adolphus,M,17 Angus,M,17 Arther,M,17 Carlos,M,17 Cary,M,17 Cassius,M,17 Davis,M,17 Hamilton,M,17 Harve,M,17 Israel,M,17 Leander,M,17 Melville,M,17 Merle,M,17 Murray,M,17 Pleasant,M,17 Sterling,M,17 Steven,M,17 Axel,M,16 Boyd,M,16 Bryant,M,16 Clement,M,16 Erwin,M,16 Ezekiel,M,16 Foster,M,16 Frances,M,16 Geo,M,16 Houston,M,16 Issac,M,16 Jules,M,16 Larkin,M,16 Mat,M,16 Morton,M,16 Orlando,M,16 Pierce,M,16 Prince,M,16 Rollie,M,16 Rollin,M,16 Sim,M,16 Stuart,M,16 Wilburn,M,16 Bennett,M,15 Casper,M,15 Christ,M,15 Dell,M,15 Egbert,M,15 Elmo,M,15 Fay,M,15 Gabriel,M,15 Hector,M,15 Horatio,M,15 Lige,M,15 Saul,M,15 Smith,M,15 Squire,M,15 Tobe,M,15 Tommie,M,15 Wyatt,M,15 Alford,M,14 Alma,M,14 Alton,M,14 Andres,M,14 Burl,M,14 Cicero,M,14 Dean,M,14 Dorsey,M,14 Enos,M,14 Howell,M,14 Lou,M,14 Loyd,M,14 Mahlon,M,14 Nat,M,14 Omar,M,14 Oran,M,14 Parker,M,14 Raleigh,M,14 Reginald,M,14 Rubin,M,14 Seymour,M,14 Wm,M,14 Young,M,14 Benjamine,M,13 Carey,M,13 Carlton,M,13 Eldridge,M,13 Elzie,M,13 Garrett,M,13 Isham,M,13 Johnson,M,13 Larry,M,13 Logan,M,13 Merrill,M,13 Mont,M,13 Oren,M,13 Pierre,M,13 Rex,M,13 Rodney,M,13 Ted,M,13 Webster,M,13 West,M,13 Wheeler,M,13 Willam,M,13 Al,M,12 Aloysius,M,12 Alvie,M,12 Anna,M,12 Art,M,12 Augustine,M,12 Bailey,M,12 Benjaman,M,12 Beverly,M,12 Bishop,M,12 Clair,M,12 Cloyd,M,12 Coleman,M,12 Dana,M,12 Duncan,M,12 Dwight,M,12 Emile,M,12 Evert,M,12 Henderson,M,12 Hunter,M,12 Jean,M,12 Lem,M,12 Luis,M,12 Mathias,M,12 Maynard,M,12 Miguel,M,12 Mortimer,M,12 Nels,M,12 Norris,M,12 Pat,M,12 Phil,M,12 Rush,M,12 Santiago,M,12 Sol,M,12 Sydney,M,12 Thaddeus,M,12 Thornton,M,12 Tim,M,12 Travis,M,12 Truman,M,12 Watson,M,12 Webb,M,12 Wellington,M,12 Winfred,M,12 Wylie,M,12 Alec,M,11 Basil,M,11 Baxter,M,11 Bertrand,M,11 Buford,M,11 Burr,M,11 Cleveland,M,11 Colonel,M,11 Dempsey,M,11 Early,M,11 Ellsworth,M,11 Fate,M,11 Finley,M,11 Gabe,M,11 Garland,M,11 Gerald,M,11 Herschel,M,11 Hezekiah,M,11 Justus,M,11 Lindsey,M,11 Marcellus,M,11 Olaf,M,11 Olin,M,11 Pablo,M,11 Rolland,M,11 Turner,M,11 Verne,M,11 Volney,M,11 Williams,M,11 Almon,M,10 Alois,M,10 Alonza,M,10 Anson,M,10 Authur,M,10 Benton,M,10 Billie,M,10 Cornelious,M,10 Darius,M,10 Denis,M,10 Dillard,M,10 Doctor,M,10 Elvin,M,10 Emma,M,10 Eric,M,10 Evans,M,10 Gideon,M,10 Haywood,M,10 Hilliard,M,10 Hosea,M,10 Lincoln,M,10 Lonzo,M,10 Lucious,M,10 Lum,M,10 Malachi,M,10 Newt,M,10 Noel,M,10 Orie,M,10 Palmer,M,10 Pinkney,M,10 Shirley,M,10 Sumner,M,10 Terry,M,10 Urban,M,10 Uriah,M,10 Valentine,M,10 Waldo,M,10 Warner,M,10 Wong,M,10 Zeb,M,10 Abel,M,9 Alden,M,9 Archer,M,9 Avery,M,9 Carson,M,9 Cullen,M,9 Doc,M,9 Eben,M,9 Elige,M,9 Elizabeth,M,9 Elmore,M,9 Ernst,M,9 Finis,M,9 Freddie,M,9 Godfrey,M,9 Guss,M,9 Hamp,M,9 Hermann,M,9 Isadore,M,9 Isreal,M,9 Jones,M,9 June,M,9 Lacy,M,9 Lafe,M,9 Leland,M,9 Llewellyn,M,9 Ludwig,M,9 Manford,M,9 Maxwell,M,9 Minnie,M,9 Obie,M,9 Octave,M,9 Orrin,M,9 Ossie,M,9 Oswald,M,9 Park,M,9 Parley,M,9 Ramon,M,9 Rice,M,9 Stonewall,M,9 Theo,M,9 Tillman,M,9 Addie,M,8 Aron,M,8 Ashley,M,8 Bernhard,M,8 Bertie,M,8 Berton,M,8 Buster,M,8 Butler,M,8 Carleton,M,8 Carrie,M,8 Clara,M,8 Clarance,M,8 Clare,M,8 Crawford,M,8 Danial,M,8 Dayton,M,8 Dolphus,M,8 Elder,M,8 Ephriam,M,8 Fayette,M,8 Felipe,M,8 Fernando,M,8 Flem,M,8 Florence,M,8 Ford,M,8 Harlan,M,8 Hayes,M,8 Henery,M,8 Hoy,M,8 Huston,M,8 Ida,M,8 Ivory,M,8 Jonah,M,8 Justin,M,8 Lenard,M,8 Leopold,M,8 Lionel,M,8 Manley,M,8 Marquis,M,8 Marshal,M,8 Mart,M,8 Odie,M,8 Olen,M,8 Oral,M,8 Orley,M,8 Otha,M,8 Press,M,8 Price,M,8 Quincy,M,8 Randall,M,8 Rich,M,8 Richmond,M,8 Romeo,M,8 Russel,M,8 Rutherford,M,8 Shade,M,8 Shelby,M,8 Solon,M,8 Thurman,M,8 Tilden,M,8 Troy,M,8 Woodson,M,8 Worth,M,8 Aden,M,7 Alcide,M,7 Alf,M,7 Algie,M,7 Arlie,M,7 Bart,M,7 Bedford,M,7 Benito,M,7 Billy,M,7 Bird,M,7 Birt,M,7 Bruno,M,7 Burley,M,7 Chancy,M,7 Claus,M,7 Cliff,M,7 Clovis,M,7 Connie,M,7 Creed,M,7 Delos,M,7 Duke,M,7 Eber,M,7 Eligah,M,7 Elliot,M,7 Elton,M,7 Emmitt,M,7 Gene,M,7 Golden,M,7 Hal,M,7 Hardin,M,7 Harman,M,7 Hervey,M,7 Hollis,M,7 Ivey,M,7 Jennie,M,7 Len,M,7 Lindsay,M,7 Lonie,M,7 Lyle,M,7 Mac,M,7 Mal,M,7 Math,M,7 Miller,M,7 Orson,M,7 Osborne,M,7 Percival,M,7 Pleas,M,7 Ples,M,7 Rafael,M,7 Raoul,M,7 Roderick,M,7 Rose,M,7 Shelton,M,7 Sid,M,7 Theron,M,7 Tobias,M,7 Toney,M,7 Tyler,M,7 Vance,M,7 Vivian,M,7 Walton,M,7 Watt,M,7 Weaver,M,7 Wilton,M,7 Adolf,M,6 Albin,M,6 Albion,M,6 Allison,M,6 Alpha,M,6 Alpheus,M,6 Anastacio,M,6 Andre,M,6 Annie,M,6 Arlington,M,6 Armand,M,6 Asberry,M,6 Asbury,M,6 Asher,M,6 Augustin,M,6 Auther,M,6 Author,M,6 Ballard,M,6 Blas,M,6 Caesar,M,6 Candido,M,6 Cato,M,6 Clarke,M,6 Clemente,M,6 Colin,M,6 Commodore,M,6 Cora,M,6 Coy,M,6 Cruz,M,6 Curt,M,6 Damon,M,6 Davie,M,6 Delmar,M,6 Dexter,M,6 Dora,M,6 Doss,M,6 Drew,M,6 Edson,M,6 Elam,M,6 Elihu,M,6 Eliza,M,6 Elsie,M,6 Erie,M,6 Ernie,M,6 Ethel,M,6 Ferd,M,6 Friend,M,6 Garry,M,6 Gary,M,6 Grace,M,6 Gustaf,M,6 Hallie,M,6 Hampton,M,6 Harrie,M,6 Hattie,M,6 Hence,M,6 Hillard,M,6 Hollie,M,6 Holmes,M,6 Hope,M,6 Hyman,M,6 Ishmael,M,6 Jarrett,M,6 Jessee,M,6 Joeseph,M,6 Junious,M,6 Kirk,M,6 Levy,M,6 Mervin,M,6 Michel,M,6 Milford,M,6 Mitchel,M,6 Nellie,M,6 Noble,M,6 Obed,M,6 Oda,M,6 Orren,M,6 Ottis,M,6 Rafe,M,6 Redden,M,6 Reese,M,6 Rube,M,6 Ruby,M,6 Rupert,M,6 Salomon,M,6 Sammie,M,6 Sanders,M,6 Soloman,M,6 Stacy,M,6 Stanford,M,6 Stanton,M,6 Thad,M,6 Titus,M,6 Tracy,M,6 Vernie,M,6 Wendell,M,6 Wilhelm,M,6 Willian,M,6 Yee,M,6 Zeke,M,6 Ab,M,5 Abbott,M,5 Agustus,M,5 Albertus,M,5 Almer,M,5 Alphonso,M,5 Alvia,M,5 Artie,M,5 Arvid,M,5 Ashby,M,5 Augusta,M,5 Aurthur,M,5 Babe,M,5 Baldwin,M,5 Barnett,M,5 Bartholomew,M,5 Barton,M,5 Bernie,M,5 Blaine,M,5 Boston,M,5 Brad,M,5 Bradford,M,5 Bradley,M,5 Brooks,M,5 Buck,M,5 Budd,M,5 Ceylon,M,5 Chalmers,M,5 Chesley,M,5 Chin,M,5 Cleo,M,5 Crockett,M,5 Cyril,M,5 Daisy,M,5 Denver,M,5 Dow,M,5 Duff,M,5 Edie,M,5 Edith,M,5 Elick,M,5 Elie,M,5 Eliga,M,5 Eliseo,M,5 Elroy,M,5 Ely,M,5 Ennis,M,5 Enrique,M,5 Erasmus,M,5 Esau,M,5 Everette,M,5 Firman,M,5 Fleming,M,5 Flora,M,5 Gardner,M,5 Gee,M,5 Gorge,M,5 Gottlieb,M,5 Gregorio,M,5 Gregory,M,5 Gustavus,M,5 Halsey,M,5 Handy,M,5 Hardie,M,5 Harl,M,5 Hayden,M,5 Hays,M,5 Hermon,M,5 Hershel,M,5 Holly,M,5 Hosteen,M,5 Hoyt,M,5 Hudson,M,5 Huey,M,5 Humphrey,M,5 Hunt,M,5 Hyrum,M,5 Irven,M,5 Isam,M,5 Ivy,M,5 Jabez,M,5 Jewel,M,5 Jodie,M,5 Judd,M,5 Julious,M,5 Justice,M,5 Katherine,M,5 Kelly,M,5 Kit,M,5 Knute,M,5 Lavern,M,5 Lawyer,M,5 Layton,M,5 Leonidas,M,5 Lewie,M,5 Lillie,M,5 Linwood,M,5 Loran,M,5 Lorin,M,5 Mace,M,5 Malcom,M,5 Manly,M,5 Manson,M,5 Matthias,M,5 Mattie,M,5 Merida,M,5 Miner,M,5 Montgomery,M,5 Moroni,M,5 Murdock,M,5 Myrtle,M,5 Nate,M,5 Nathanial,M,5 Nimrod,M,5 Nora,M,5 Norval,M,5 Nova,M,5 Orion,M,5 Orla,M,5 Orrie,M,5 Payton,M,5 Philo,M,5 Phineas,M,5 Presley,M,5 Ransom,M,5 Reece,M,5 Rene,M,5 Roswell,M,5 Rowland,M,5 Sampson,M,5 Samual,M,5 Santos,M,5 Schuyler,M,5 Sheppard,M,5 Spurgeon,M,5 Starling,M,5 Sylvanus,M,5 Theadore,M,5 Theophile,M,5 Tilmon,M,5 Tommy,M,5 Unknown,M,5 Vann,M,5 Wes,M,5 Winston,M,5 Wood,M,5 Woodie,M,5 Worthy,M,5 Wright,M,5 York,M,5 Zachariah,M,5 ')
1
2
3
4
5
其余初始化RDD的方法,包括:HDFS上的文件,Hive中的数据库与表,Spark SQL得到的结果。这里暂时不做介绍。

RDD Transformation
(1)RDDs可以进行一系列的变换得到新的RDD,有点类似列表推导式的操作,先给出一些RDD上最常用到的transformation:
map() 对RDD的每一个item都执行同一个操作
flatMap() 对RDD中的item执行同一个操作以后得到一个list,然后以平铺的方式把这些list里所有的结果组成新的list
filter() 筛选出来满足条件的item
distinct() 对RDD中的item去重
sample() 从RDD中的item中采样一部分出来,有放回或者无放回
sortBy() 对RDD中的item进行排序

如果想看操作后的结果,可以用一个叫做collect()的action把所有的item转成一个Python list。数据量大时,collect()很危险……

import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

numbersRDD = sc.parallelize(range(1,10+1))
print(numbersRDD.collect())

#map()对RDD的每一个item都执行同一个操作
squaresRDD = numbersRDD.map(lambda x: x**2) # Square every number
print(squaresRDD.collect())

#filter()筛选出来满足条件的item
filteredRDD = numbersRDD.filter(lambda x: x % 2 == 0) # Only the evens
print(filteredRDD.collect())

#Output:
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#[2, 4, 6, 8, 10]

import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

#flatMap() 对RDD中的item执行同一个操作以后得到一个list,然后以平铺的方式把这些list里所有的结果组成新的list
sentencesRDD=sc.parallelize(['Hello world','My name is Patrick'])
wordsRDD=sentencesRDD.flatMap(lambda sentence: sentence.split(" "))
print(wordsRDD.collect())
print(wordsRDD.count())

#Output:
#['Hello', 'world', 'My', 'name', 'is', 'Patrick']
#6

对比一下:
这里如果使用map的结果是[[‘Hello’, ‘world’], [‘My’, ‘name’, ‘is’, ‘Patrick’]],
使用flatmap的结果是全部展开[‘Hello’, ‘world’, ‘My’, ‘name’, ‘is’, ‘Patrick’]。
flatmap即对应Python里的如下操作:

l = ['Hello world', 'My name is Patrick']
ll = []
for sentence in l:
ll = ll + sentence.split(" ") #+号作用,two list拼接
ll

(2)最开始列出的各个Transformation,可以一个接一个地串联使用,比如:
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

def doubleIfOdd(x):
if x % 2 == 1:
return 2 * x
else:
return x
numbersRDD = sc.parallelize(range(1,10+1))
resultRDD = (numbersRDD
.map(doubleIfOdd) #map,filter,distinct()
.filter(lambda x: x > 6)
.distinct()) #distinct()对RDD中的item去重
resultRDD.collect()

#Output:[8, 10, 18, 14]

(3)当遇到更复杂的结构,比如被称作“pair RDDs”的以元组形式组织的k-v对(key, value),Spark中针对这种item结构的数据,定义了一些transform和action:
reduceByKey(): 对所有有着相同key的items执行reduce操作
groupByKey(): 返回类似(key, listOfValues)元组的RDD,后面的value List 是同一个key下面的
sortByKey(): 按照key排序
countByKey(): 按照key去对item个数进行统计
collectAsMap(): 和collect有些类似,但是返回的是k-v的字典

import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

rdd=sc.parallelize(["Hello hello", "Hello New York", "York says hello"])
resultRDD=(rdd
.flatMap(lambda sentence:sentence.split(" "))
.map(lambda word:word.lower())
.map(lambda word:(word, 1)) #将word映射成(word,1)
.reduceByKey(lambda x, y: x + y)) #reduceByKey对所有有着相同key的items执行reduce操作
resultRDD.collect()

#Output:[('hello', 4), ('york', 2), ('says', 1), ('new', 1)]

result = resultRDD.collectAsMap() #collectAsMap类似collect,以k-v字典的形式返回
result

#Output:{'hello': 4, 'new': 1, 'says': 1, 'york': 2}

resultRDD.sortByKey(ascending=True).take(2) #sortByKey按键排序

#Output:[('hello', 4), ('new', 1)]

#取出现频次最高的2个词
print(resultRDD
.sortBy(lambda x: x[1], ascending=False)
.take(2))

#Output:[('hello', 4), ('york', 2)]

RDD间的操作
(1)如果有2个RDD,可以通过下面这些操作,对它们进行集合运算得到1个新的RDD
rdd1.union(rdd2): 所有rdd1和rdd2中的item组合(并集)
rdd1.intersection(rdd2): rdd1 和 rdd2的交集
rdd1.substract(rdd2): 所有在rdd1中但不在rdd2中的item(差集)
rdd1.cartesian(rdd2): rdd1 和 rdd2中所有的元素笛卡尔乘积(正交和)
1
2
3
4
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

#初始化两个RDD
numbersRDD = sc.parallelize([1,2,3])
moreNumbersRDD = sc.parallelize([2,3,4])

numbersRDD.union(moreNumbersRDD).collect() #union()取并集

#Output:[1, 2, 3, 2, 3, 4]

numbersRDD.intersection(moreNumbersRDD).collect() #intersection()取交集

#Output:[2, 3]

numbersRDD.subtract(moreNumbersRDD).collect() #substract()取差集

#Output:[1]

numbersRDD.cartesian(moreNumbersRDD).collect() #cartesian()取笛卡尔积

#Output:[(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4)]

(2)在给定2个RDD后,可以通过一个类似SQL的方式去join它们
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

# Home of different people
homesRDD = sc.parallelize([
('Brussels', 'John'),
('Brussels', 'Jack'),
('Leuven', 'Jane'),
('Antwerp', 'Jill'),
])

# Quality of life index for various cities
lifeQualityRDD = sc.parallelize([
('Brussels', 10),
('Antwerp', 7),
('RestOfFlanders', 5),
])

homesRDD.join(lifeQualityRDD).collect() #join

#Output:
#[('Antwerp', ('Jill', 7)),
# ('Brussels', ('John', 10)),
# ('Brussels', ('Jack', 10))]

homesRDD.leftOuterJoin(lifeQualityRDD).collect() #leftOuterJoin

#Output:
#[('Antwerp', ('Jill', 7)),
# ('Leuven', ('Jane', None)),
# ('Brussels', ('John', 10)),
# ('Brussels', ('Jack', 10))]

homesRDD.rightOuterJoin(lifeQualityRDD).collect() #rightOuterJoin

#Output:
#[('Antwerp', ('Jill', 7)),
# ('RestOfFlanders', (None, 5)),
# ('Brussels', ('John', 10)),
# ('Brussels', ('Jack', 10))]

homesRDD.cogroup(lifeQualityRDD).collect() #cogroup

#Output:
#[('Antwerp',
# (<pyspark.resultiterable.ResultIterable at 0x73d2d68>,
# <pyspark.resultiterable.ResultIterable at 0x73d2940>)),
# ('RestOfFlanders',
# (<pyspark.resultiterable.ResultIterable at 0x73d2828>,
# <pyspark.resultiterable.ResultIterable at 0x73d2b70>)),
# ('Leuven',
# (<pyspark.resultiterable.ResultIterable at 0x73d26a0>,
# <pyspark.resultiterable.ResultIterable at 0x7410a58>)),
# ('Brussels',
# (<pyspark.resultiterable.ResultIterable at 0x73d2b38>,
# <pyspark.resultiterable.ResultIterable at 0x74106a0>))]

# Oops! Those <ResultIterable>s are Spark's way of returning a list
# that we can walk over, without materializing the list.
# Let's materialize the lists to make the above more readable:
(homesRDD
.cogroup(lifeQualityRDD)
.map(lambda x:(x[0], (list(x[1][0]), list(x[1][1]))))
.collect())

#Output:
#[('Antwerp', (['Jill'], [7])),
# ('RestOfFlanders', ([], [5])),
# ('Leuven', (['Jane'], [])),
# ('Brussels', (['John', 'Jack'], [10]))]
1
2
3
4
5
6
7
8
9
10
11
12
13
惰性计算,actions方法
特别注意:Spark的一个核心概念是惰性计算。当你把一个RDD转换成另一个的时候,这个转换不会立即生效执行!!!Spark会把它先记在心里,等到真的有actions需要取转换结果时,才会重新组织transformations(因为可能有一连串的变换)。这样可以避免不必要的中间结果存储和通信。

常见的action如下,当它们出现的时候,表明需要执行上面定义过的transform了:

collect(): 计算所有的items并返回所有的结果到driver端,接着 collect()会以Python list的形式返回结果
first(): 和上面是类似的,不过只返回第1个item
take(n): 类似,但是返回n个item
count(): 计算RDD中item的个数
top(n): 返回头n个items,按照自然结果排序
reduce(): 对RDD中的items做聚合

import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)

rdd = sc.parallelize(range(1,10+1))
rdd.reduce(lambda x, y: x + y) #reduce(): 对RDD中的items做聚合

#Output:55

reduce的原理:先在每个分区(partition)里完成reduce操作,然后再全局地进行reduce。

有时候需要重复用到某个transform序列得到的RDD结果。但是一遍遍重复计算显然是要开销的,所以我们可以通过一个叫做cache()的操作把它暂时地存储在内存中。缓存RDD结果对于重复迭代的操作非常有用,比如很多机器学习的算法,训练过程需要重复迭代。
import pyspark
from pyspark import SparkContext as sc
from pyspark import SparkConf
conf=SparkConf().setAppName("miniProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)
import numpy as np
numbersRDD = sc.parallelize(np.linspace(1.0, 10.0, 10))
squaresRDD = numbersRDD.map(lambda x: x**2)

squaresRDD.cache() # Preserve the actual items of this RDD in memory

avg = squaresRDD.reduce(lambda x, y: x + y) / squaresRDD.count()
print(avg)

#Output:38.5


原文地址:https://www.cnblogs.com/to-here/p/14707954.html