转载:原文链接: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:UsersYu JulyLearn5weekhadoopspark
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