├── .gitignore ├── LICENSE ├── build.sbt ├── project └── plugins.sbt └── src └── main ├── resources ├── all-shakespeare.txt ├── enron │ └── enron.zip ├── female-names.txt ├── flights │ ├── airlines.csv │ ├── airports.csv │ ├── license.txt │ └── routes.csv ├── kjv │ └── kjvdat.txt ├── log4j.properties ├── logs │ ├── log1.txt │ └── log2.txt └── male-names.txt └── scala └── sw ├── air └── Air.scala ├── df ├── DataFrames.scala ├── JoinsInDF.scala └── Json.scala ├── ds └── DataSets.scala ├── other ├── Loose.scala └── SaveMeMaybe.scala ├── pairrdds ├── CompilationError.scala ├── GuessingStages.scala └── Startings.scala ├── partitioner └── UsingPartitioner.scala ├── rdds ├── OnlyJuliet.scala └── SomeOperations.scala ├── serialization └── SerializationIssues.scala ├── sql ├── FirstLoads.scala ├── Hive.scala └── Joins.scala ├── streaming ├── Effective.scala ├── Kafka.scala ├── ReadingFromDirectory.scala ├── SimpleStreaming.scala ├── Transformer.scala ├── UpdateState.scala ├── WebPageLogsGenerator.scala └── Windows.scala └── utils └── FileUtil.scala /.gitignore: -------------------------------------------------------------------------------- 1 | *.*~ 2 | target/ 3 | /.ensime 4 | .ensime_cache/ 5 | checkpoint/ 6 | src/main/scala/sw/streaming/WebPageLogsGenerator$.class 7 | src/main/scala/sw/streaming/WebPageLogsGenerator$delayedInit$body.class 8 | src/main/scala/sw/streaming/WebPageLogsGenerator.class 9 | /derby.log 10 | metastore_db/ 11 | /src/main/resources/enron/enron.json 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /build.sbt: -------------------------------------------------------------------------------- 1 | name := "spark-workshop" 2 | scalaVersion := "2.11.8" 3 | 4 | libraryDependencies ++= Seq( 5 | "org.apache.spark" %% "spark-core" % "2.1.0" % "provided", 6 | "org.apache.spark" %% "spark-sql" % "2.1.0" % "provided", 7 | "org.apache.spark" %% "spark-hive" % "2.1.0" % "provided", 8 | "org.apache.spark" %% "spark-streaming" % "2.1.0" % "provided", 9 | // "org.apache.spark" %% "spark-streaming-kafka" % "1.6.1" % "provided", 10 | "com.github.melrief" %% "purecsv" % "0.0.6" 11 | // compilerPlugin("org.scalamacros" % "paradise" % "2.0.1" cross CrossVersion.full) 12 | ) 13 | 14 | assemblyJarName in assembly := "fat.jar" 15 | run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)) 16 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.1") 2 | -------------------------------------------------------------------------------- /src/main/resources/enron/enron.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EncodePanda/spark-workshop/5567759dfe55d82c6ffe78196b7049101cebe871/src/main/resources/enron/enron.zip -------------------------------------------------------------------------------- /src/main/resources/flights/license.txt: -------------------------------------------------------------------------------- 1 | Data was downloaded from http://openflights.org/data.html 2 | 3 | The OpenFlights Airport, Airline and Route Databases are made available under the Open Database License. Any rights in individual contents of the database are licensed under the Database Contents License. In short, these mean that you are welcome to use the data as you wish, if and only if you both acknowledge the source and and license any derived works made available to the public with a free license as well. 4 | -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Set only warnings 2 | log4j.rootCategory=ERROR, console 3 | log4j.appender.console=org.apache.log4j.ConsoleAppender 4 | log4j.appender.console.target=System.err 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n 7 | 8 | log4j.logger.org.apache.spark.repl.Main=ERROR 9 | 10 | # Settings to quiet third party logs that are too verbose 11 | log4j.logger.org.spark_project.jetty=ERROR 12 | log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR 13 | log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR 14 | log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR 15 | log4j.logger.org.apache.parquet=ERROR 16 | log4j.logger.parquet=ERROR 17 | 18 | # SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support 19 | log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL 20 | -------------------------------------------------------------------------------- /src/main/resources/logs/log1.txt: -------------------------------------------------------------------------------- 1 | 66.249.69.97 - - [24/Sep/2014:22:25:44 +0000] "GET /071300/242153 HTTP/1.1" 404 514 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 2 | 71.19.157.174 - - [24/Sep/2014:22:26:12 +0000] "GET /error HTTP/1.1" 404 505 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 3 | 71.19.157.174 - - [24/Sep/2014:22:26:12 +0000] "GET /favicon.ico HTTP/1.1" 200 1713 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 4 | 71.19.157.174 - - [24/Sep/2014:22:26:37 +0000] "GET / HTTP/1.1" 200 18785 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 5 | 71.19.157.174 - - [24/Sep/2014:22:26:37 +0000] "GET /jobmineimg.php?q=m HTTP/1.1" 200 222 "http://www.holdenkarau.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 6 | -------------------------------------------------------------------------------- /src/main/resources/logs/log2.txt: -------------------------------------------------------------------------------- 1 | 66.249.69.97 - - [24/Sep/2014:22:25:44 +0000] "GET /071300/242153 HTTP/1.1" 404 514 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 2 | 71.19.157.174 - - [24/Sep/2014:22:26:12 +0000] "GET /error HTTP/1.1" 404 505 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 3 | 71.19.157.174 - - [24/Sep/2014:22:26:12 +0000] "GET /favicon.ico HTTP/1.1" 200 1713 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 4 | 71.19.157.174 - - [24/Sep/2014:22:26:37 +0000] "GET / HTTP/1.1" 200 18785 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 5 | 71.19.157.174 - - [24/Sep/2014:22:26:37 +0000] "GET /jobmineimg.php?q=m HTTP/1.1" 200 222 "http://www.holdenkarau.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36" 6 | -------------------------------------------------------------------------------- /src/main/resources/male-names.txt: -------------------------------------------------------------------------------- 1 | JAMES 3.318 3.318 1 2 | JOHN 3.271 6.589 2 3 | ROBERT 3.143 9.732 3 4 | MICHAEL 2.629 12.361 4 5 | WILLIAM 2.451 14.812 5 6 | DAVID 2.363 17.176 6 7 | RICHARD 1.703 18.878 7 8 | CHARLES 1.523 20.401 8 9 | JOSEPH 1.404 21.805 9 10 | THOMAS 1.380 23.185 10 11 | CHRISTOPHER 1.035 24.220 11 12 | DANIEL 0.974 25.194 12 13 | PAUL 0.948 26.142 13 14 | MARK 0.938 27.081 14 15 | DONALD 0.931 28.012 15 16 | GEORGE 0.927 28.939 16 17 | KENNETH 0.826 29.766 17 18 | STEVEN 0.780 30.546 18 19 | EDWARD 0.779 31.325 19 20 | BRIAN 0.736 32.061 20 21 | RONALD 0.725 32.787 21 22 | ANTHONY 0.721 33.508 22 23 | KEVIN 0.671 34.179 23 24 | JASON 0.660 34.839 24 25 | MATTHEW 0.657 35.496 25 26 | GARY 0.650 36.147 26 27 | TIMOTHY 0.640 36.786 27 28 | JOSE 0.613 37.399 28 29 | LARRY 0.598 37.997 29 30 | JEFFREY 0.591 38.588 30 31 | FRANK 0.581 39.169 31 32 | SCOTT 0.546 39.715 32 33 | ERIC 0.544 40.259 33 34 | STEPHEN 0.540 40.799 34 35 | ANDREW 0.537 41.335 35 36 | RAYMOND 0.488 41.824 36 37 | GREGORY 0.441 42.265 37 38 | JOSHUA 0.435 42.700 38 39 | JERRY 0.432 43.132 39 40 | DENNIS 0.415 43.547 40 41 | WALTER 0.399 43.946 41 42 | PATRICK 0.389 44.335 42 43 | PETER 0.381 44.716 43 44 | HAROLD 0.371 45.087 44 45 | DOUGLAS 0.367 45.454 45 46 | HENRY 0.365 45.819 46 47 | CARL 0.346 46.165 47 48 | ARTHUR 0.335 46.500 48 49 | RYAN 0.328 46.828 49 50 | ROGER 0.322 47.150 50 51 | JOE 0.321 47.471 51 52 | JUAN 0.316 47.786 52 53 | JACK 0.315 48.102 53 54 | ALBERT 0.314 48.415 54 55 | JONATHAN 0.313 48.729 55 56 | JUSTIN 0.311 49.040 56 57 | TERRY 0.311 49.351 57 58 | GERALD 0.309 49.660 58 59 | KEITH 0.308 49.968 59 60 | SAMUEL 0.306 50.274 60 61 | WILLIE 0.302 50.576 61 62 | RALPH 0.282 50.859 62 63 | LAWRENCE 0.282 51.141 63 64 | NICHOLAS 0.275 51.415 64 65 | ROY 0.273 51.688 65 66 | BENJAMIN 0.270 51.958 66 67 | BRUCE 0.263 52.221 67 68 | BRANDON 0.260 52.480 68 69 | ADAM 0.259 52.740 69 70 | HARRY 0.251 52.991 70 71 | FRED 0.251 53.241 71 72 | WAYNE 0.249 53.490 72 73 | BILLY 0.248 53.738 73 74 | STEVE 0.246 53.984 74 75 | LOUIS 0.243 54.227 75 76 | JEREMY 0.242 54.469 76 77 | AARON 0.240 54.710 77 78 | RANDY 0.232 54.942 78 79 | HOWARD 0.230 55.172 79 80 | EUGENE 0.230 55.402 80 81 | CARLOS 0.229 55.630 81 82 | RUSSELL 0.224 55.854 82 83 | BOBBY 0.223 56.077 83 84 | VICTOR 0.222 56.299 84 85 | MARTIN 0.216 56.515 85 86 | ERNEST 0.215 56.730 86 87 | PHILLIP 0.213 56.942 87 88 | TODD 0.213 57.155 88 89 | JESSE 0.209 57.364 89 90 | CRAIG 0.206 57.570 90 91 | ALAN 0.204 57.774 91 92 | SHAWN 0.200 57.973 92 93 | CLARENCE 0.197 58.170 93 94 | SEAN 0.197 58.368 94 95 | PHILIP 0.197 58.565 95 96 | CHRIS 0.197 58.761 96 97 | JOHNNY 0.195 58.957 97 98 | EARL 0.193 59.149 98 99 | JIMMY 0.191 59.340 99 100 | ANTONIO 0.190 59.531 100 101 | DANNY 0.190 59.720 101 102 | BRYAN 0.190 59.910 102 103 | TONY 0.190 60.100 103 104 | LUIS 0.189 60.289 104 105 | MIKE 0.189 60.478 105 106 | STANLEY 0.186 60.665 106 107 | LEONARD 0.186 60.850 107 108 | NATHAN 0.185 61.035 108 109 | DALE 0.184 61.219 109 110 | MANUEL 0.181 61.400 110 111 | RODNEY 0.180 61.581 111 112 | CURTIS 0.180 61.761 112 113 | NORMAN 0.177 61.938 113 114 | ALLEN 0.174 62.112 114 115 | MARVIN 0.171 62.283 115 116 | VINCENT 0.168 62.450 116 117 | GLENN 0.167 62.617 117 118 | JEFFERY 0.166 62.783 118 119 | TRAVIS 0.166 62.949 119 120 | JEFF 0.166 63.114 120 121 | CHAD 0.165 63.279 121 122 | JACOB 0.165 63.444 122 123 | LEE 0.162 63.606 123 124 | MELVIN 0.162 63.768 124 125 | ALFRED 0.162 63.930 125 126 | KYLE 0.160 64.090 126 127 | FRANCIS 0.160 64.250 127 128 | BRADLEY 0.159 64.409 128 129 | JESUS 0.155 64.564 129 130 | HERBERT 0.155 64.719 130 131 | FREDERICK 0.154 64.873 131 132 | RAY 0.153 65.026 132 133 | JOEL 0.152 65.177 133 134 | EDWIN 0.148 65.326 134 135 | DON 0.145 65.471 135 136 | EDDIE 0.144 65.615 136 137 | RICKY 0.141 65.756 137 138 | TROY 0.138 65.895 138 139 | RANDALL 0.138 66.032 139 140 | BARRY 0.134 66.167 140 141 | ALEXANDER 0.132 66.299 141 142 | BERNARD 0.127 66.427 142 143 | MARIO 0.125 66.552 143 144 | LEROY 0.125 66.676 144 145 | FRANCISCO 0.124 66.801 145 146 | MARCUS 0.124 66.925 146 147 | MICHEAL 0.123 67.048 147 148 | THEODORE 0.123 67.171 148 149 | CLIFFORD 0.123 67.293 149 150 | MIGUEL 0.122 67.415 150 151 | OSCAR 0.122 67.538 151 152 | JAY 0.118 67.656 152 153 | JIM 0.118 67.773 153 154 | TOM 0.117 67.890 154 155 | CALVIN 0.115 68.006 155 156 | ALEX 0.115 68.120 156 157 | JON 0.115 68.235 157 158 | RONNIE 0.113 68.348 158 159 | BILL 0.112 68.461 159 160 | LLOYD 0.112 68.573 160 161 | TOMMY 0.112 68.685 161 162 | LEON 0.112 68.797 162 163 | DEREK 0.112 68.908 163 164 | WARREN 0.110 69.018 164 165 | DARRELL 0.108 69.126 165 166 | JEROME 0.108 69.234 166 167 | FLOYD 0.107 69.340 167 168 | LEO 0.106 69.446 168 169 | ALVIN 0.105 69.551 169 170 | TIM 0.104 69.656 170 171 | WESLEY 0.104 69.760 171 172 | GORDON 0.104 69.864 172 173 | DEAN 0.104 69.968 173 174 | GREG 0.104 70.071 174 175 | JORGE 0.104 70.175 175 176 | DUSTIN 0.103 70.278 176 177 | PEDRO 0.103 70.381 177 178 | DERRICK 0.103 70.484 178 179 | DAN 0.101 70.585 179 180 | LEWIS 0.099 70.684 180 181 | ZACHARY 0.099 70.782 181 182 | COREY 0.098 70.880 182 183 | HERMAN 0.097 70.977 183 184 | MAURICE 0.097 71.074 184 185 | VERNON 0.097 71.171 185 186 | ROBERTO 0.097 71.268 186 187 | CLYDE 0.095 71.363 187 188 | GLEN 0.094 71.457 188 189 | HECTOR 0.094 71.551 189 190 | SHANE 0.093 71.645 190 191 | RICARDO 0.093 71.738 191 192 | SAM 0.092 71.830 192 193 | RICK 0.091 71.921 193 194 | LESTER 0.091 72.011 194 195 | BRENT 0.090 72.102 195 196 | RAMON 0.090 72.192 196 197 | CHARLIE 0.090 72.281 197 198 | TYLER 0.089 72.371 198 199 | GILBERT 0.089 72.460 199 200 | GENE 0.087 72.547 200 201 | MARC 0.087 72.634 201 202 | REGINALD 0.084 72.717 202 203 | RUBEN 0.082 72.800 203 204 | BRETT 0.082 72.882 204 205 | ANGEL 0.082 72.964 205 206 | NATHANIEL 0.081 73.045 206 207 | RAFAEL 0.081 73.126 207 208 | LESLIE 0.081 73.207 208 209 | EDGAR 0.080 73.287 209 210 | MILTON 0.080 73.367 210 211 | RAUL 0.079 73.446 211 212 | BEN 0.078 73.524 212 213 | CHESTER 0.078 73.602 213 214 | CECIL 0.078 73.680 214 215 | DUANE 0.077 73.757 215 216 | FRANKLIN 0.077 73.834 216 217 | ANDRE 0.076 73.910 217 218 | ELMER 0.074 73.984 218 219 | BRAD 0.073 74.057 219 220 | GABRIEL 0.073 74.130 220 221 | RON 0.072 74.202 221 222 | MITCHELL 0.072 74.274 222 223 | ROLAND 0.072 74.347 223 224 | ARNOLD 0.072 74.419 224 225 | HARVEY 0.072 74.491 225 226 | JARED 0.071 74.562 226 227 | ADRIAN 0.069 74.631 227 228 | KARL 0.069 74.699 228 229 | CORY 0.068 74.767 229 230 | CLAUDE 0.068 74.835 230 231 | ERIK 0.068 74.903 231 232 | DARRYL 0.067 74.970 232 233 | JAMIE 0.066 75.037 233 234 | NEIL 0.066 75.102 234 235 | JESSIE 0.065 75.168 235 236 | CHRISTIAN 0.065 75.233 236 237 | JAVIER 0.065 75.297 237 238 | FERNANDO 0.065 75.362 238 239 | CLINTON 0.065 75.427 239 240 | TED 0.064 75.491 240 241 | MATHEW 0.064 75.555 241 242 | TYRONE 0.064 75.619 242 243 | DARREN 0.064 75.683 243 244 | LONNIE 0.064 75.746 244 245 | LANCE 0.063 75.810 245 246 | CODY 0.063 75.873 246 247 | JULIO 0.063 75.936 247 248 | KELLY 0.063 75.998 248 249 | KURT 0.062 76.061 249 250 | ALLAN 0.061 76.122 250 251 | NELSON 0.061 76.182 251 252 | GUY 0.060 76.243 252 253 | CLAYTON 0.060 76.303 253 254 | HUGH 0.060 76.363 254 255 | MAX 0.059 76.421 255 256 | DWAYNE 0.059 76.480 256 257 | DWIGHT 0.058 76.538 257 258 | ARMANDO 0.058 76.596 258 259 | FELIX 0.058 76.654 259 260 | JIMMIE 0.058 76.711 260 261 | EVERETT 0.057 76.768 261 262 | JORDAN 0.056 76.824 262 263 | IAN 0.056 76.880 263 264 | WALLACE 0.056 76.936 264 265 | KEN 0.055 76.991 265 266 | BOB 0.055 77.047 266 267 | JAIME 0.055 77.102 267 268 | CASEY 0.054 77.156 268 269 | ALFREDO 0.054 77.210 269 270 | ALBERTO 0.053 77.263 270 271 | DAVE 0.053 77.316 271 272 | IVAN 0.053 77.369 272 273 | JOHNNIE 0.052 77.421 273 274 | SIDNEY 0.052 77.474 274 275 | BYRON 0.052 77.526 275 276 | JULIAN 0.052 77.578 276 277 | ISAAC 0.051 77.629 277 278 | MORRIS 0.051 77.680 278 279 | CLIFTON 0.050 77.730 279 280 | WILLARD 0.050 77.780 280 281 | DARYL 0.050 77.831 281 282 | ROSS 0.050 77.880 282 283 | VIRGIL 0.049 77.929 283 284 | ANDY 0.049 77.979 284 285 | MARSHALL 0.049 78.028 285 286 | SALVADOR 0.049 78.077 286 287 | PERRY 0.049 78.126 287 288 | KIRK 0.049 78.175 288 289 | SERGIO 0.049 78.224 289 290 | MARION 0.048 78.272 290 291 | TRACY 0.048 78.320 291 292 | SETH 0.048 78.368 292 293 | KENT 0.048 78.416 293 294 | TERRANCE 0.048 78.464 294 295 | RENE 0.048 78.512 295 296 | EDUARDO 0.047 78.559 296 297 | TERRENCE 0.047 78.606 297 298 | ENRIQUE 0.046 78.652 298 299 | FREDDIE 0.046 78.698 299 300 | WADE 0.045 78.743 300 301 | AUSTIN 0.044 78.786 301 302 | STUART 0.044 78.830 302 303 | FREDRICK 0.043 78.873 303 304 | ARTURO 0.043 78.917 304 305 | ALEJANDRO 0.043 78.960 305 306 | JACKIE 0.043 79.002 306 307 | JOEY 0.043 79.045 307 308 | NICK 0.043 79.088 308 309 | LUTHER 0.043 79.130 309 310 | WENDELL 0.042 79.172 310 311 | JEREMIAH 0.042 79.215 311 312 | EVAN 0.042 79.257 312 313 | JULIUS 0.042 79.298 313 314 | DANA 0.042 79.340 314 315 | DONNIE 0.041 79.381 315 316 | OTIS 0.041 79.422 316 317 | SHANNON 0.040 79.462 317 318 | TREVOR 0.040 79.503 318 319 | OLIVER 0.040 79.543 319 320 | LUKE 0.040 79.583 320 321 | HOMER 0.040 79.623 321 322 | GERARD 0.040 79.663 322 323 | DOUG 0.040 79.703 323 324 | KENNY 0.039 79.742 324 325 | HUBERT 0.039 79.782 325 326 | ANGELO 0.039 79.821 326 327 | SHAUN 0.039 79.859 327 328 | LYLE 0.038 79.898 328 329 | MATT 0.038 79.936 329 330 | LYNN 0.038 79.974 330 331 | ALFONSO 0.038 80.012 331 332 | ORLANDO 0.037 80.049 332 333 | REX 0.037 80.086 333 334 | CARLTON 0.037 80.123 334 335 | ERNESTO 0.037 80.160 335 336 | CAMERON 0.037 80.197 336 337 | NEAL 0.037 80.233 337 338 | PABLO 0.036 80.270 338 339 | LORENZO 0.036 80.306 339 340 | OMAR 0.036 80.342 340 341 | WILBUR 0.036 80.378 341 342 | BLAKE 0.036 80.414 342 343 | GRANT 0.036 80.450 343 344 | HORACE 0.036 80.486 344 345 | RODERICK 0.036 80.521 345 346 | KERRY 0.036 80.557 346 347 | ABRAHAM 0.035 80.592 347 348 | WILLIS 0.035 80.627 348 349 | RICKEY 0.035 80.662 349 350 | JEAN 0.035 80.696 350 351 | IRA 0.035 80.731 351 352 | ANDRES 0.034 80.766 352 353 | CESAR 0.034 80.800 353 354 | JOHNATHAN 0.034 80.834 354 355 | MALCOLM 0.034 80.868 355 356 | RUDOLPH 0.034 80.902 356 357 | DAMON 0.034 80.936 357 358 | KELVIN 0.034 80.970 358 359 | RUDY 0.034 81.004 359 360 | PRESTON 0.034 81.037 360 361 | ALTON 0.033 81.071 361 362 | ARCHIE 0.033 81.104 362 363 | MARCO 0.033 81.137 363 364 | WM 0.033 81.170 364 365 | PETE 0.032 81.202 365 366 | RANDOLPH 0.032 81.234 366 367 | GARRY 0.032 81.267 367 368 | GEOFFREY 0.032 81.299 368 369 | JONATHON 0.032 81.331 369 370 | FELIPE 0.032 81.363 370 371 | BENNIE 0.032 81.395 371 372 | GERARDO 0.032 81.427 372 373 | ED 0.032 81.458 373 374 | DOMINIC 0.032 81.490 374 375 | ROBIN 0.032 81.522 375 376 | LOREN 0.032 81.553 376 377 | DELBERT 0.031 81.585 377 378 | COLIN 0.031 81.616 378 379 | GUILLERMO 0.031 81.647 379 380 | EARNEST 0.031 81.678 380 381 | LUCAS 0.031 81.709 381 382 | BENNY 0.030 81.739 382 383 | NOEL 0.030 81.769 383 384 | SPENCER 0.030 81.799 384 385 | RODOLFO 0.030 81.828 385 386 | MYRON 0.030 81.858 386 387 | EDMUND 0.030 81.887 387 388 | GARRETT 0.029 81.917 388 389 | SALVATORE 0.029 81.946 389 390 | CEDRIC 0.029 81.975 390 391 | LOWELL 0.029 82.004 391 392 | GREGG 0.029 82.032 392 393 | SHERMAN 0.028 82.061 393 394 | WILSON 0.028 82.089 394 395 | DEVIN 0.028 82.117 395 396 | SYLVESTER 0.028 82.145 396 397 | KIM 0.028 82.173 397 398 | ROOSEVELT 0.028 82.201 398 399 | ISRAEL 0.028 82.229 399 400 | JERMAINE 0.028 82.257 400 401 | FORREST 0.027 82.284 401 402 | WILBERT 0.027 82.310 402 403 | LELAND 0.027 82.337 403 404 | SIMON 0.026 82.363 404 405 | GUADALUPE 0.026 82.390 405 406 | CLARK 0.026 82.416 406 407 | IRVING 0.026 82.442 407 408 | CARROLL 0.026 82.468 408 409 | BRYANT 0.026 82.494 409 410 | OWEN 0.026 82.519 410 411 | RUFUS 0.025 82.545 411 412 | WOODROW 0.025 82.570 412 413 | SAMMY 0.025 82.595 413 414 | KRISTOPHER 0.025 82.620 414 415 | MACK 0.025 82.645 415 416 | LEVI 0.025 82.670 416 417 | MARCOS 0.025 82.695 417 418 | GUSTAVO 0.025 82.720 418 419 | JAKE 0.025 82.744 419 420 | LIONEL 0.024 82.769 420 421 | MARTY 0.024 82.793 421 422 | TAYLOR 0.024 82.817 422 423 | ELLIS 0.024 82.842 423 424 | DALLAS 0.024 82.866 424 425 | GILBERTO 0.024 82.890 425 426 | CLINT 0.024 82.914 426 427 | NICOLAS 0.024 82.938 427 428 | LAURENCE 0.024 82.962 428 429 | ISMAEL 0.024 82.985 429 430 | ORVILLE 0.024 83.009 430 431 | DREW 0.024 83.033 431 432 | JODY 0.024 83.056 432 433 | ERVIN 0.023 83.080 433 434 | DEWEY 0.023 83.103 434 435 | AL 0.023 83.126 435 436 | WILFRED 0.023 83.150 436 437 | JOSH 0.023 83.173 437 438 | HUGO 0.023 83.196 438 439 | IGNACIO 0.023 83.219 439 440 | CALEB 0.023 83.241 440 441 | TOMAS 0.023 83.264 441 442 | SHELDON 0.023 83.287 442 443 | ERICK 0.023 83.310 443 444 | FRANKIE 0.023 83.332 444 445 | STEWART 0.022 83.354 445 446 | DOYLE 0.022 83.377 446 447 | DARREL 0.022 83.399 447 448 | ROGELIO 0.022 83.421 448 449 | TERENCE 0.022 83.443 449 450 | SANTIAGO 0.022 83.465 450 451 | ALONZO 0.022 83.487 451 452 | ELIAS 0.022 83.508 452 453 | BERT 0.022 83.530 453 454 | ELBERT 0.022 83.552 454 455 | RAMIRO 0.022 83.573 455 456 | CONRAD 0.022 83.595 456 457 | PAT 0.022 83.616 457 458 | NOAH 0.022 83.638 458 459 | GRADY 0.021 83.659 459 460 | PHIL 0.021 83.681 460 461 | CORNELIUS 0.021 83.702 461 462 | LAMAR 0.021 83.723 462 463 | ROLANDO 0.021 83.744 463 464 | CLAY 0.021 83.765 464 465 | PERCY 0.021 83.786 465 466 | DEXTER 0.021 83.806 466 467 | BRADFORD 0.021 83.827 467 468 | MERLE 0.021 83.848 468 469 | DARIN 0.020 83.868 469 470 | AMOS 0.020 83.888 470 471 | TERRELL 0.020 83.909 471 472 | MOSES 0.020 83.929 472 473 | IRVIN 0.020 83.949 473 474 | SAUL 0.020 83.968 474 475 | ROMAN 0.020 83.988 475 476 | DARNELL 0.020 84.008 476 477 | RANDAL 0.020 84.027 477 478 | TOMMIE 0.020 84.047 478 479 | TIMMY 0.019 84.066 479 480 | DARRIN 0.019 84.086 480 481 | WINSTON 0.019 84.105 481 482 | BRENDAN 0.019 84.124 482 483 | TOBY 0.019 84.144 483 484 | VAN 0.019 84.163 484 485 | ABEL 0.019 84.182 485 486 | DOMINICK 0.019 84.201 486 487 | BOYD 0.019 84.220 487 488 | COURTNEY 0.019 84.240 488 489 | JAN 0.019 84.259 489 490 | EMILIO 0.019 84.277 490 491 | ELIJAH 0.019 84.296 491 492 | CARY 0.019 84.315 492 493 | DOMINGO 0.019 84.334 493 494 | SANTOS 0.019 84.353 494 495 | AUBREY 0.019 84.372 495 496 | EMMETT 0.019 84.390 496 497 | MARLON 0.019 84.409 497 498 | EMANUEL 0.019 84.428 498 499 | JERALD 0.019 84.446 499 500 | EDMOND 0.019 84.465 500 501 | EMIL 0.019 84.483 501 502 | DEWAYNE 0.018 84.502 502 503 | WILL 0.018 84.520 503 504 | OTTO 0.018 84.538 504 505 | TEDDY 0.018 84.556 505 506 | REYNALDO 0.018 84.574 506 507 | BRET 0.018 84.592 507 508 | MORGAN 0.018 84.610 508 509 | JESS 0.018 84.628 509 510 | TRENT 0.018 84.646 510 511 | HUMBERTO 0.018 84.664 511 512 | EMMANUEL 0.018 84.681 512 513 | STEPHAN 0.018 84.699 513 514 | LOUIE 0.018 84.717 514 515 | VICENTE 0.017 84.734 515 516 | LAMONT 0.017 84.751 516 517 | STACY 0.017 84.769 517 518 | GARLAND 0.017 84.786 518 519 | MILES 0.017 84.803 519 520 | MICAH 0.017 84.820 520 521 | EFRAIN 0.017 84.837 521 522 | BILLIE 0.017 84.854 522 523 | LOGAN 0.017 84.871 523 524 | HEATH 0.017 84.887 524 525 | RODGER 0.017 84.904 525 526 | HARLEY 0.017 84.921 526 527 | DEMETRIUS 0.017 84.937 527 528 | ETHAN 0.017 84.954 528 529 | ELDON 0.017 84.970 529 530 | ROCKY 0.016 84.987 530 531 | PIERRE 0.016 85.003 531 532 | JUNIOR 0.016 85.020 532 533 | FREDDY 0.016 85.036 533 534 | ELI 0.016 85.052 534 535 | BRYCE 0.016 85.068 535 536 | ANTOINE 0.016 85.084 536 537 | ROBBIE 0.016 85.100 537 538 | KENDALL 0.016 85.116 538 539 | ROYCE 0.016 85.132 539 540 | STERLING 0.016 85.148 540 541 | MICKEY 0.016 85.164 541 542 | CHASE 0.016 85.180 542 543 | GROVER 0.016 85.196 543 544 | ELTON 0.016 85.212 544 545 | CLEVELAND 0.016 85.228 545 546 | DYLAN 0.016 85.243 546 547 | CHUCK 0.016 85.259 547 548 | DAMIAN 0.016 85.274 548 549 | REUBEN 0.015 85.290 549 550 | STAN 0.015 85.305 550 551 | AUGUST 0.015 85.321 551 552 | LEONARDO 0.015 85.336 552 553 | JASPER 0.015 85.351 553 554 | RUSSEL 0.015 85.367 554 555 | ERWIN 0.015 85.382 555 556 | BENITO 0.015 85.397 556 557 | HANS 0.015 85.412 557 558 | MONTE 0.015 85.427 558 559 | BLAINE 0.015 85.442 559 560 | ERNIE 0.015 85.456 560 561 | CURT 0.015 85.471 561 562 | QUENTIN 0.015 85.486 562 563 | AGUSTIN 0.015 85.500 563 564 | MURRAY 0.015 85.515 564 565 | JAMAL 0.014 85.529 565 566 | DEVON 0.014 85.544 566 567 | ADOLFO 0.014 85.558 567 568 | HARRISON 0.014 85.573 568 569 | TYSON 0.014 85.587 569 570 | BURTON 0.014 85.601 570 571 | BRADY 0.014 85.616 571 572 | ELLIOTT 0.014 85.630 572 573 | WILFREDO 0.014 85.644 573 574 | BART 0.014 85.658 574 575 | JARROD 0.014 85.672 575 576 | VANCE 0.014 85.686 576 577 | DENIS 0.014 85.700 577 578 | DAMIEN 0.014 85.714 578 579 | JOAQUIN 0.014 85.728 579 580 | HARLAN 0.014 85.742 580 581 | DESMOND 0.014 85.756 581 582 | ELLIOT 0.014 85.770 582 583 | DARWIN 0.014 85.783 583 584 | ASHLEY 0.014 85.797 584 585 | GREGORIO 0.014 85.811 585 586 | BUDDY 0.014 85.824 586 587 | XAVIER 0.013 85.838 587 588 | KERMIT 0.013 85.851 588 589 | ROSCOE 0.013 85.865 589 590 | ESTEBAN 0.013 85.878 590 591 | ANTON 0.013 85.891 591 592 | SOLOMON 0.013 85.904 592 593 | SCOTTY 0.013 85.917 593 594 | NORBERT 0.013 85.930 594 595 | ELVIN 0.013 85.943 595 596 | WILLIAMS 0.013 85.956 596 597 | NOLAN 0.013 85.969 597 598 | CAREY 0.013 85.982 598 599 | ROD 0.013 85.994 599 600 | QUINTON 0.013 86.007 600 601 | HAL 0.013 86.020 601 602 | BRAIN 0.013 86.033 602 603 | ROB 0.013 86.045 603 604 | ELWOOD 0.013 86.058 604 605 | KENDRICK 0.013 86.070 605 606 | DARIUS 0.013 86.083 606 607 | MOISES 0.013 86.096 607 608 | SON 0.012 86.108 608 609 | MARLIN 0.012 86.120 609 610 | FIDEL 0.012 86.133 610 611 | THADDEUS 0.012 86.145 611 612 | CLIFF 0.012 86.158 612 613 | MARCEL 0.012 86.170 613 614 | ALI 0.012 86.182 614 615 | JACKSON 0.012 86.195 615 616 | RAPHAEL 0.012 86.207 616 617 | BRYON 0.012 86.219 617 618 | ARMAND 0.012 86.231 618 619 | ALVARO 0.012 86.244 619 620 | JEFFRY 0.012 86.256 620 621 | DANE 0.012 86.268 621 622 | JOESPH 0.012 86.280 622 623 | THURMAN 0.012 86.292 623 624 | NED 0.012 86.304 624 625 | SAMMIE 0.012 86.316 625 626 | RUSTY 0.012 86.328 626 627 | MICHEL 0.012 86.339 627 628 | MONTY 0.012 86.351 628 629 | RORY 0.012 86.363 629 630 | FABIAN 0.012 86.374 630 631 | REGGIE 0.012 86.386 631 632 | MASON 0.012 86.397 632 633 | GRAHAM 0.012 86.409 633 634 | KRIS 0.011 86.420 634 635 | ISAIAH 0.011 86.432 635 636 | VAUGHN 0.011 86.443 636 637 | GUS 0.011 86.454 637 638 | AVERY 0.011 86.466 638 639 | LOYD 0.011 86.477 639 640 | DIEGO 0.011 86.488 640 641 | ALEXIS 0.011 86.499 641 642 | ADOLPH 0.011 86.511 642 643 | NORRIS 0.011 86.522 643 644 | MILLARD 0.011 86.533 644 645 | ROCCO 0.011 86.544 645 646 | GONZALO 0.011 86.555 646 647 | DERICK 0.011 86.566 647 648 | RODRIGO 0.011 86.577 648 649 | GERRY 0.011 86.588 649 650 | STACEY 0.011 86.599 650 651 | CARMEN 0.011 86.610 651 652 | WILEY 0.011 86.621 652 653 | RIGOBERTO 0.011 86.632 653 654 | ALPHONSO 0.011 86.643 654 655 | TY 0.011 86.654 655 656 | SHELBY 0.011 86.664 656 657 | RICKIE 0.011 86.675 657 658 | NOE 0.011 86.686 658 659 | VERN 0.010 86.696 659 660 | BOBBIE 0.010 86.707 660 661 | REED 0.010 86.717 661 662 | JEFFERSON 0.010 86.727 662 663 | ELVIS 0.010 86.738 663 664 | BERNARDO 0.010 86.748 664 665 | MAURICIO 0.010 86.758 665 666 | HIRAM 0.010 86.768 666 667 | DONOVAN 0.010 86.778 667 668 | BASIL 0.010 86.789 668 669 | RILEY 0.010 86.799 669 670 | OLLIE 0.010 86.809 670 671 | NICKOLAS 0.010 86.819 671 672 | MAYNARD 0.010 86.829 672 673 | SCOT 0.010 86.840 673 674 | VINCE 0.010 86.850 674 675 | QUINCY 0.010 86.860 675 676 | EDDY 0.010 86.870 676 677 | SEBASTIAN 0.010 86.880 677 678 | FEDERICO 0.010 86.890 678 679 | ULYSSES 0.010 86.900 679 680 | HERIBERTO 0.010 86.910 680 681 | DONNELL 0.010 86.920 681 682 | COLE 0.010 86.929 682 683 | DENNY 0.010 86.939 683 684 | DAVIS 0.010 86.949 684 685 | GAVIN 0.010 86.959 685 686 | EMERY 0.010 86.969 686 687 | WARD 0.010 86.979 687 688 | ROMEO 0.010 86.989 688 689 | JAYSON 0.010 86.998 689 690 | DION 0.010 87.008 690 691 | DANTE 0.010 87.018 691 692 | CLEMENT 0.010 87.028 692 693 | COY 0.010 87.037 693 694 | ODELL 0.010 87.047 694 695 | MAXWELL 0.010 87.057 695 696 | JARVIS 0.010 87.066 696 697 | BRUNO 0.010 87.076 697 698 | ISSAC 0.010 87.086 698 699 | MARY 0.009 87.095 699 700 | DUDLEY 0.009 87.104 700 701 | BROCK 0.009 87.114 701 702 | SANFORD 0.009 87.123 702 703 | COLBY 0.009 87.133 703 704 | CARMELO 0.009 87.142 704 705 | BARNEY 0.009 87.152 705 706 | NESTOR 0.009 87.161 706 707 | HOLLIS 0.009 87.170 707 708 | STEFAN 0.009 87.180 708 709 | DONNY 0.009 87.189 709 710 | ART 0.009 87.198 710 711 | LINWOOD 0.009 87.208 711 712 | BEAU 0.009 87.217 712 713 | WELDON 0.009 87.226 713 714 | GALEN 0.009 87.235 714 715 | ISIDRO 0.009 87.244 715 716 | TRUMAN 0.009 87.253 716 717 | DELMAR 0.009 87.262 717 718 | JOHNATHON 0.009 87.271 718 719 | SILAS 0.009 87.280 719 720 | FREDERIC 0.009 87.289 720 721 | DICK 0.009 87.298 721 722 | KIRBY 0.009 87.307 722 723 | IRWIN 0.009 87.316 723 724 | CRUZ 0.009 87.325 724 725 | MERLIN 0.009 87.334 725 726 | MERRILL 0.009 87.343 726 727 | CHARLEY 0.009 87.351 727 728 | MARCELINO 0.009 87.360 728 729 | LANE 0.009 87.369 729 730 | HARRIS 0.009 87.378 730 731 | CLEO 0.009 87.386 731 732 | CARLO 0.009 87.395 732 733 | TRENTON 0.009 87.404 733 734 | KURTIS 0.009 87.413 734 735 | HUNTER 0.009 87.421 735 736 | AURELIO 0.009 87.430 736 737 | WINFRED 0.009 87.438 737 738 | VITO 0.009 87.447 738 739 | COLLIN 0.009 87.456 739 740 | DENVER 0.009 87.464 740 741 | CARTER 0.009 87.473 741 742 | LEONEL 0.008 87.481 742 743 | EMORY 0.008 87.490 743 744 | PASQUALE 0.008 87.498 744 745 | MOHAMMAD 0.008 87.506 745 746 | MARIANO 0.008 87.514 746 747 | DANIAL 0.008 87.523 747 748 | BLAIR 0.008 87.531 748 749 | LANDON 0.008 87.539 749 750 | DIRK 0.008 87.548 750 751 | BRANDEN 0.008 87.556 751 752 | ADAN 0.008 87.564 752 753 | NUMBERS 0.008 87.572 753 754 | CLAIR 0.008 87.581 754 755 | BUFORD 0.008 87.589 755 756 | GERMAN 0.008 87.597 756 757 | BERNIE 0.008 87.605 757 758 | WILMER 0.008 87.613 758 759 | JOAN 0.008 87.621 759 760 | EMERSON 0.008 87.629 760 761 | ZACHERY 0.008 87.637 761 762 | FLETCHER 0.008 87.645 762 763 | JACQUES 0.008 87.653 763 764 | ERROL 0.008 87.661 764 765 | DALTON 0.008 87.669 765 766 | MONROE 0.008 87.676 766 767 | JOSUE 0.008 87.684 767 768 | DOMINIQUE 0.008 87.692 768 769 | EDWARDO 0.008 87.700 769 770 | BOOKER 0.008 87.708 770 771 | WILFORD 0.008 87.715 771 772 | SONNY 0.008 87.723 772 773 | SHELTON 0.008 87.731 773 774 | CARSON 0.008 87.739 774 775 | THERON 0.008 87.746 775 776 | RAYMUNDO 0.008 87.754 776 777 | DAREN 0.008 87.762 777 778 | TRISTAN 0.008 87.769 778 779 | HOUSTON 0.008 87.777 779 780 | ROBBY 0.008 87.785 780 781 | LINCOLN 0.008 87.792 781 782 | JAME 0.008 87.800 782 783 | GENARO 0.008 87.807 783 784 | GALE 0.008 87.815 784 785 | BENNETT 0.008 87.822 785 786 | OCTAVIO 0.008 87.830 786 787 | CORNELL 0.008 87.838 787 788 | LAVERNE 0.008 87.845 788 789 | HUNG 0.008 87.853 789 790 | ARRON 0.008 87.860 790 791 | ANTONY 0.008 87.868 791 792 | HERSCHEL 0.007 87.875 792 793 | ALVA 0.007 87.883 793 794 | GIOVANNI 0.007 87.890 794 795 | GARTH 0.007 87.897 795 796 | CYRUS 0.007 87.905 796 797 | CYRIL 0.007 87.912 797 798 | RONNY 0.007 87.920 798 799 | STEVIE 0.007 87.927 799 800 | LON 0.007 87.934 800 801 | FREEMAN 0.007 87.941 801 802 | ERIN 0.007 87.949 802 803 | DUNCAN 0.007 87.956 803 804 | KENNITH 0.007 87.963 804 805 | CARMINE 0.007 87.970 805 806 | AUGUSTINE 0.007 87.978 806 807 | YOUNG 0.007 87.985 807 808 | ERICH 0.007 87.992 808 809 | CHADWICK 0.007 87.999 809 810 | WILBURN 0.007 88.006 810 811 | RUSS 0.007 88.013 811 812 | REID 0.007 88.021 812 813 | MYLES 0.007 88.028 813 814 | ANDERSON 0.007 88.035 814 815 | MORTON 0.007 88.042 815 816 | JONAS 0.007 88.049 816 817 | FOREST 0.007 88.056 817 818 | MITCHEL 0.007 88.063 818 819 | MERVIN 0.007 88.070 819 820 | ZANE 0.007 88.077 820 821 | RICH 0.007 88.084 821 822 | JAMEL 0.007 88.091 822 823 | LAZARO 0.007 88.098 823 824 | ALPHONSE 0.007 88.105 824 825 | RANDELL 0.007 88.112 825 826 | MAJOR 0.007 88.119 826 827 | JOHNIE 0.007 88.126 827 828 | JARRETT 0.007 88.133 828 829 | BROOKS 0.007 88.140 829 830 | ARIEL 0.007 88.147 830 831 | ABDUL 0.007 88.154 831 832 | DUSTY 0.007 88.161 832 833 | LUCIANO 0.007 88.168 833 834 | LINDSEY 0.007 88.174 834 835 | TRACEY 0.007 88.181 835 836 | SEYMOUR 0.007 88.188 836 837 | SCOTTIE 0.007 88.195 837 838 | EUGENIO 0.007 88.202 838 839 | MOHAMMED 0.007 88.208 839 840 | SANDY 0.007 88.215 840 841 | VALENTIN 0.007 88.222 841 842 | CHANCE 0.007 88.228 842 843 | ARNULFO 0.007 88.235 843 844 | LUCIEN 0.007 88.242 844 845 | FERDINAND 0.007 88.248 845 846 | THAD 0.007 88.255 846 847 | EZRA 0.007 88.262 847 848 | SYDNEY 0.007 88.268 848 849 | ALDO 0.007 88.275 849 850 | RUBIN 0.006 88.281 850 851 | ROYAL 0.006 88.288 851 852 | MITCH 0.006 88.294 852 853 | EARLE 0.006 88.301 853 854 | ABE 0.006 88.307 854 855 | WYATT 0.006 88.314 855 856 | MARQUIS 0.006 88.320 856 857 | LANNY 0.006 88.326 857 858 | KAREEM 0.006 88.333 858 859 | JAMAR 0.006 88.339 859 860 | BORIS 0.006 88.346 860 861 | ISIAH 0.006 88.352 861 862 | EMILE 0.006 88.358 862 863 | ELMO 0.006 88.365 863 864 | ARON 0.006 88.371 864 865 | LEOPOLDO 0.006 88.377 865 866 | EVERETTE 0.006 88.384 866 867 | JOSEF 0.006 88.390 867 868 | GAIL 0.006 88.396 868 869 | ELOY 0.006 88.403 869 870 | DORIAN 0.006 88.409 870 871 | RODRICK 0.006 88.415 871 872 | REINALDO 0.006 88.421 872 873 | LUCIO 0.006 88.427 873 874 | JERROD 0.006 88.434 874 875 | WESTON 0.006 88.440 875 876 | HERSHEL 0.006 88.446 876 877 | BARTON 0.006 88.452 877 878 | PARKER 0.006 88.458 878 879 | LEMUEL 0.006 88.464 879 880 | LAVERN 0.006 88.470 880 881 | BURT 0.006 88.477 881 882 | JULES 0.006 88.483 882 883 | GIL 0.006 88.489 883 884 | ELISEO 0.006 88.495 884 885 | AHMAD 0.006 88.501 885 886 | NIGEL 0.006 88.507 886 887 | EFREN 0.006 88.513 887 888 | ANTWAN 0.006 88.519 888 889 | ALDEN 0.006 88.525 889 890 | MARGARITO 0.006 88.531 890 891 | COLEMAN 0.006 88.537 891 892 | REFUGIO 0.006 88.543 892 893 | DINO 0.006 88.549 893 894 | OSVALDO 0.006 88.555 894 895 | LES 0.006 88.560 895 896 | DEANDRE 0.006 88.566 896 897 | NORMAND 0.006 88.572 897 898 | KIETH 0.006 88.578 898 899 | IVORY 0.006 88.584 899 900 | ANDREA 0.006 88.590 900 901 | TREY 0.006 88.595 901 902 | NORBERTO 0.006 88.601 902 903 | NAPOLEON 0.006 88.607 903 904 | JEROLD 0.006 88.613 904 905 | FRITZ 0.006 88.619 905 906 | ROSENDO 0.006 88.624 906 907 | MILFORD 0.006 88.630 907 908 | SANG 0.006 88.636 908 909 | DEON 0.006 88.641 909 910 | CHRISTOPER 0.006 88.647 910 911 | ALFONZO 0.006 88.653 911 912 | LYMAN 0.006 88.658 912 913 | JOSIAH 0.006 88.664 913 914 | BRANT 0.006 88.670 914 915 | WILTON 0.006 88.675 915 916 | RICO 0.006 88.681 916 917 | JAMAAL 0.006 88.687 917 918 | DEWITT 0.006 88.692 918 919 | CAROL 0.006 88.698 919 920 | BRENTON 0.006 88.704 920 921 | YONG 0.006 88.709 921 922 | OLIN 0.006 88.715 922 923 | FOSTER 0.006 88.720 923 924 | FAUSTINO 0.006 88.726 924 925 | CLAUDIO 0.006 88.731 925 926 | JUDSON 0.006 88.737 926 927 | GINO 0.006 88.743 927 928 | EDGARDO 0.006 88.748 928 929 | BERRY 0.006 88.754 929 930 | ALEC 0.006 88.759 930 931 | TANNER 0.006 88.765 931 932 | JARRED 0.006 88.770 932 933 | DONN 0.006 88.776 933 934 | TRINIDAD 0.005 88.781 934 935 | TAD 0.005 88.787 935 936 | SHIRLEY 0.005 88.792 936 937 | PRINCE 0.005 88.798 937 938 | PORFIRIO 0.005 88.803 938 939 | ODIS 0.005 88.809 939 940 | MARIA 0.005 88.814 940 941 | LENARD 0.005 88.820 941 942 | CHAUNCEY 0.005 88.825 942 943 | CHANG 0.005 88.831 943 944 | TOD 0.005 88.836 944 945 | MEL 0.005 88.842 945 946 | MARCELO 0.005 88.847 946 947 | KORY 0.005 88.853 947 948 | AUGUSTUS 0.005 88.858 948 949 | KEVEN 0.005 88.864 949 950 | HILARIO 0.005 88.869 950 951 | BUD 0.005 88.874 951 952 | SAL 0.005 88.880 952 953 | ROSARIO 0.005 88.885 953 954 | ORVAL 0.005 88.891 954 955 | MAURO 0.005 88.896 955 956 | DANNIE 0.005 88.901 956 957 | ZACHARIAH 0.005 88.907 957 958 | OLEN 0.005 88.912 958 959 | ANIBAL 0.005 88.917 959 960 | MILO 0.005 88.923 960 961 | JED 0.005 88.928 961 962 | FRANCES 0.005 88.933 962 963 | THANH 0.005 88.939 963 964 | DILLON 0.005 88.944 964 965 | AMADO 0.005 88.949 965 966 | NEWTON 0.005 88.955 966 967 | CONNIE 0.005 88.960 967 968 | LENNY 0.005 88.965 968 969 | TORY 0.005 88.970 969 970 | RICHIE 0.005 88.975 970 971 | LUPE 0.005 88.981 971 972 | HORACIO 0.005 88.986 972 973 | BRICE 0.005 88.991 973 974 | MOHAMED 0.005 88.996 974 975 | DELMER 0.005 89.001 975 976 | DARIO 0.005 89.006 976 977 | REYES 0.005 89.012 977 978 | DEE 0.005 89.017 978 979 | MAC 0.005 89.022 979 980 | JONAH 0.005 89.027 980 981 | JERROLD 0.005 89.032 981 982 | ROBT 0.005 89.037 982 983 | HANK 0.005 89.042 983 984 | SUNG 0.005 89.047 984 985 | RUPERT 0.005 89.052 985 986 | ROLLAND 0.005 89.057 986 987 | KENTON 0.005 89.062 987 988 | DAMION 0.005 89.067 988 989 | CHI 0.005 89.072 989 990 | ANTONE 0.005 89.077 990 991 | WALDO 0.005 89.082 991 992 | FREDRIC 0.005 89.087 992 993 | BRADLY 0.005 89.092 993 994 | QUINN 0.005 89.097 994 995 | KIP 0.005 89.102 995 996 | BURL 0.005 89.107 996 997 | WALKER 0.005 89.112 997 998 | TYREE 0.005 89.117 998 999 | JEFFEREY 0.005 89.122 999 1000 | AHMED 0.005 89.127 1000 1001 | WILLY 0.005 89.132 1001 1002 | STANFORD 0.005 89.137 1002 1003 | OREN 0.005 89.142 1003 1004 | NOBLE 0.005 89.146 1004 1005 | MOSHE 0.005 89.151 1005 1006 | MIKEL 0.005 89.156 1006 1007 | ENOCH 0.005 89.161 1007 1008 | BRENDON 0.005 89.166 1008 1009 | QUINTIN 0.005 89.171 1009 1010 | JAMISON 0.005 89.176 1010 1011 | FLORENCIO 0.005 89.181 1011 1012 | DARRICK 0.005 89.185 1012 1013 | TOBIAS 0.005 89.190 1013 1014 | MINH 0.005 89.195 1014 1015 | HASSAN 0.005 89.200 1015 1016 | GIUSEPPE 0.005 89.205 1016 1017 | DEMARCUS 0.005 89.210 1017 1018 | CLETUS 0.005 89.214 1018 1019 | TYRELL 0.005 89.219 1019 1020 | LYNDON 0.005 89.224 1020 1021 | KEENAN 0.005 89.229 1021 1022 | WERNER 0.005 89.234 1022 1023 | THEO 0.005 89.238 1023 1024 | GERALDO 0.005 89.243 1024 1025 | LOU 0.005 89.248 1025 1026 | COLUMBUS 0.005 89.253 1026 1027 | CHET 0.005 89.257 1027 1028 | BERTRAM 0.005 89.262 1028 1029 | MARKUS 0.005 89.267 1029 1030 | HUEY 0.005 89.271 1030 1031 | HILTON 0.005 89.276 1031 1032 | DWAIN 0.005 89.281 1032 1033 | DONTE 0.005 89.285 1033 1034 | TYRON 0.005 89.290 1034 1035 | OMER 0.005 89.295 1035 1036 | ISAIAS 0.005 89.299 1036 1037 | HIPOLITO 0.005 89.304 1037 1038 | FERMIN 0.005 89.309 1038 1039 | CHUNG 0.005 89.313 1039 1040 | ADALBERTO 0.005 89.318 1040 1041 | VALENTINE 0.005 89.323 1041 1042 | JAMEY 0.005 89.327 1042 1043 | BO 0.005 89.332 1043 1044 | BARRETT 0.005 89.336 1044 1045 | WHITNEY 0.005 89.341 1045 1046 | TEODORO 0.005 89.345 1046 1047 | MCKINLEY 0.005 89.350 1047 1048 | MAXIMO 0.005 89.355 1048 1049 | GARFIELD 0.005 89.359 1049 1050 | SOL 0.005 89.364 1050 1051 | RALEIGH 0.005 89.368 1051 1052 | LAWERENCE 0.005 89.373 1052 1053 | ABRAM 0.005 89.377 1053 1054 | RASHAD 0.004 89.382 1054 1055 | KING 0.004 89.386 1055 1056 | EMMITT 0.004 89.391 1056 1057 | DARON 0.004 89.395 1057 1058 | CHONG 0.004 89.400 1058 1059 | SAMUAL 0.004 89.404 1059 1060 | PARIS 0.004 89.409 1060 1061 | OTHA 0.004 89.413 1061 1062 | MIQUEL 0.004 89.418 1062 1063 | LACY 0.004 89.422 1063 1064 | EUSEBIO 0.004 89.426 1064 1065 | DONG 0.004 89.431 1065 1066 | DOMENIC 0.004 89.435 1066 1067 | DARRON 0.004 89.440 1067 1068 | BUSTER 0.004 89.444 1068 1069 | ANTONIA 0.004 89.449 1069 1070 | WILBER 0.004 89.453 1070 1071 | RENATO 0.004 89.458 1071 1072 | JC 0.004 89.462 1072 1073 | HOYT 0.004 89.466 1073 1074 | HAYWOOD 0.004 89.471 1074 1075 | EZEKIEL 0.004 89.475 1075 1076 | CHAS 0.004 89.480 1076 1077 | FLORENTINO 0.004 89.484 1077 1078 | ELROY 0.004 89.489 1078 1079 | CLEMENTE 0.004 89.493 1079 1080 | ARDEN 0.004 89.497 1080 1081 | NEVILLE 0.004 89.502 1081 1082 | KELLEY 0.004 89.506 1082 1083 | EDISON 0.004 89.510 1083 1084 | DESHAWN 0.004 89.515 1084 1085 | CARROL 0.004 89.519 1085 1086 | SHAYNE 0.004 89.523 1086 1087 | NATHANIAL 0.004 89.528 1087 1088 | JORDON 0.004 89.532 1088 1089 | DANILO 0.004 89.536 1089 1090 | CLAUD 0.004 89.541 1090 1091 | VAL 0.004 89.545 1091 1092 | SHERWOOD 0.004 89.549 1092 1093 | RAYMON 0.004 89.554 1093 1094 | RAYFORD 0.004 89.558 1094 1095 | CRISTOBAL 0.004 89.562 1095 1096 | AMBROSE 0.004 89.567 1096 1097 | TITUS 0.004 89.571 1097 1098 | HYMAN 0.004 89.575 1098 1099 | FELTON 0.004 89.579 1099 1100 | EZEQUIEL 0.004 89.584 1100 1101 | ERASMO 0.004 89.588 1101 1102 | STANTON 0.004 89.592 1102 1103 | LONNY 0.004 89.596 1103 1104 | LEN 0.004 89.601 1104 1105 | IKE 0.004 89.605 1105 1106 | MILAN 0.004 89.609 1106 1107 | LINO 0.004 89.613 1107 1108 | JAROD 0.004 89.617 1108 1109 | HERB 0.004 89.622 1109 1110 | ANDREAS 0.004 89.626 1110 1111 | WALTON 0.004 89.630 1111 1112 | RHETT 0.004 89.634 1112 1113 | PALMER 0.004 89.638 1113 1114 | JUDE 0.004 89.642 1114 1115 | DOUGLASS 0.004 89.647 1115 1116 | CORDELL 0.004 89.651 1116 1117 | OSWALDO 0.004 89.655 1117 1118 | ELLSWORTH 0.004 89.659 1118 1119 | VIRGILIO 0.004 89.663 1119 1120 | TONEY 0.004 89.667 1120 1121 | NATHANAEL 0.004 89.671 1121 1122 | DEL 0.004 89.675 1122 1123 | BRITT 0.004 89.679 1123 1124 | BENEDICT 0.004 89.684 1124 1125 | MOSE 0.004 89.688 1125 1126 | HONG 0.004 89.692 1126 1127 | LEIGH 0.004 89.696 1127 1128 | JOHNSON 0.004 89.700 1128 1129 | ISREAL 0.004 89.704 1129 1130 | GAYLE 0.004 89.708 1130 1131 | GARRET 0.004 89.712 1131 1132 | FAUSTO 0.004 89.716 1132 1133 | ASA 0.004 89.720 1133 1134 | ARLEN 0.004 89.724 1134 1135 | ZACK 0.004 89.728 1135 1136 | WARNER 0.004 89.732 1136 1137 | MODESTO 0.004 89.736 1137 1138 | FRANCESCO 0.004 89.740 1138 1139 | MANUAL 0.004 89.744 1139 1140 | JAE 0.004 89.748 1140 1141 | GAYLORD 0.004 89.752 1141 1142 | GASTON 0.004 89.756 1142 1143 | FILIBERTO 0.004 89.759 1143 1144 | DEANGELO 0.004 89.763 1144 1145 | MICHALE 0.004 89.767 1145 1146 | GRANVILLE 0.004 89.771 1146 1147 | WES 0.004 89.775 1147 1148 | MALIK 0.004 89.779 1148 1149 | ZACKARY 0.004 89.783 1149 1150 | TUAN 0.004 89.787 1150 1151 | NICKY 0.004 89.790 1151 1152 | ELDRIDGE 0.004 89.794 1152 1153 | CRISTOPHER 0.004 89.798 1153 1154 | CORTEZ 0.004 89.802 1154 1155 | ANTIONE 0.004 89.806 1155 1156 | MALCOM 0.004 89.809 1156 1157 | LONG 0.004 89.813 1157 1158 | KOREY 0.004 89.817 1158 1159 | JOSPEH 0.004 89.821 1159 1160 | COLTON 0.004 89.825 1160 1161 | WAYLON 0.004 89.828 1161 1162 | VON 0.004 89.832 1162 1163 | HOSEA 0.004 89.836 1163 1164 | SHAD 0.004 89.840 1164 1165 | SANTO 0.004 89.843 1165 1166 | RUDOLF 0.004 89.847 1166 1167 | ROLF 0.004 89.851 1167 1168 | REY 0.004 89.855 1168 1169 | RENALDO 0.004 89.858 1169 1170 | MARCELLUS 0.004 89.862 1170 1171 | LUCIUS 0.004 89.866 1171 1172 | LESLEY 0.004 89.870 1172 1173 | KRISTOFER 0.004 89.873 1173 1174 | BOYCE 0.004 89.877 1174 1175 | BENTON 0.004 89.881 1175 1176 | MAN 0.004 89.884 1176 1177 | KASEY 0.004 89.888 1177 1178 | JEWELL 0.004 89.892 1178 1179 | HAYDEN 0.004 89.895 1179 1180 | HARLAND 0.004 89.899 1180 1181 | ARNOLDO 0.004 89.903 1181 1182 | RUEBEN 0.004 89.907 1182 1183 | LEANDRO 0.004 89.910 1183 1184 | KRAIG 0.004 89.914 1184 1185 | JERRELL 0.004 89.918 1185 1186 | JEROMY 0.004 89.921 1186 1187 | HOBERT 0.004 89.925 1187 1188 | CEDRICK 0.004 89.929 1188 1189 | ARLIE 0.004 89.932 1189 1190 | WINFORD 0.004 89.936 1190 1191 | WALLY 0.004 89.939 1191 1192 | PATRICIA 0.004 89.943 1192 1193 | LUIGI 0.004 89.947 1193 1194 | KENETH 0.004 89.950 1194 1195 | JACINTO 0.004 89.954 1195 1196 | GRAIG 0.004 89.958 1196 1197 | FRANKLYN 0.004 89.961 1197 1198 | EDMUNDO 0.004 89.965 1198 1199 | SID 0.004 89.968 1199 1200 | PORTER 0.004 89.972 1200 1201 | LEIF 0.004 89.976 1201 1202 | LAUREN 0.004 89.979 1202 1203 | JERAMY 0.004 89.983 1203 1204 | ELISHA 0.004 89.986 1204 1205 | BUCK 0.004 89.990 1205 1206 | WILLIAN 0.004 89.994 1206 1207 | VINCENZO 0.004 89.997 1207 1208 | SHON 0.004 90.001 1208 1209 | MICHAL 0.004 90.004 1209 1210 | LYNWOOD 0.004 90.008 1210 1211 | LINDSAY 0.004 90.011 1211 1212 | JEWEL 0.004 90.015 1212 1213 | JERE 0.004 90.018 1213 1214 | HAI 0.004 90.022 1214 1215 | ELDEN 0.004 90.026 1215 1216 | DORSEY 0.004 90.029 1216 1217 | DARELL 0.004 90.033 1217 1218 | BRODERICK 0.004 90.036 1218 1219 | ALONSO 0.004 90.040 1219 1220 | -------------------------------------------------------------------------------- /src/main/scala/sw/air/Air.scala: -------------------------------------------------------------------------------- 1 | package sw.air 2 | 3 | import org.apache.spark.sql._ 4 | import purecsv.unsafe._ 5 | 6 | case class Airport(id: Long, name: String, city: String, country: String, iata: String, icao: String, latitude: Double, longitude: Double, altitude: Int, timezone: Double, dst: String, timezoneName: String) 7 | case class Airline(id: Long, name: String, alias: String, iata: String, icao: String, callsign: String, country: String, active: String) 8 | case class Route(airline: String, airlineId: String, sourceAirport: String, sourceAirportId: String, destinationAirport: String, destinatationAirportId: String, codeshare: String, stops: Int, equipment: String) 9 | 10 | object Airport { 11 | 12 | def apply(sqlCtx: SQLContext) = { 13 | val sc = sqlCtx.sparkContext 14 | val airportsPath = "src/main/resources/flights/airports.csv" 15 | 16 | val airportsRdd = sc.textFile(airportsPath) 17 | .filter(!_.startsWith("\"")) 18 | .flatMap(line => CSVReader[Airport].readCSVFromString(line)) 19 | 20 | sqlCtx.createDataFrame(airportsRdd) 21 | } 22 | } 23 | 24 | object Airline { 25 | def apply(sqlCtx: SQLContext) = { 26 | val sc = sqlCtx.sparkContext 27 | val airlinesPath = "src/main/resources/flights/airlines.csv" 28 | 29 | val airlinesRdd = sc.textFile(airlinesPath) 30 | .filter(!_.startsWith("\"")) 31 | .flatMap(line => CSVReader[Airline].readCSVFromString(line)) 32 | 33 | sqlCtx.createDataFrame(airlinesRdd) 34 | } 35 | } 36 | 37 | object Route { 38 | def apply(sqlCtx: SQLContext) = { 39 | val sc = sqlCtx.sparkContext 40 | val routesPath = "src/main/resources/flights/routes.csv" 41 | 42 | val routesRdd = sc.textFile(routesPath) 43 | .filter(!_.startsWith("\"")) 44 | .flatMap(line => CSVReader[Route].readCSVFromString(line)) 45 | 46 | sqlCtx.createDataFrame(routesRdd) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/scala/sw/df/DataFrames.scala: -------------------------------------------------------------------------------- 1 | package sw.df 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import org.apache.spark.sql.functions._ 6 | import org.apache.spark.sql.expressions._ 7 | import sw.air._ 8 | 9 | object Recap extends App { 10 | 11 | val sparkConf = new SparkConf() 12 | .setAppName(this.getClass.getName) 13 | .setMaster("local[*]") 14 | val sc = new SparkContext(sparkConf) 15 | val sqlCtx = new SQLContext(sc) 16 | import sqlCtx._ 17 | 18 | val airports = Airport(sqlCtx) 19 | 20 | airports.printSchema 21 | airports.show(10) 22 | 23 | sc.stop() 24 | 25 | } 26 | 27 | object SimpleQueries extends App { 28 | 29 | val sparkConf = new SparkConf() 30 | .setAppName(this.getClass.getName) 31 | .setMaster("local[*]") 32 | val sc = new SparkContext(sparkConf) 33 | val sqlCtx = new SQLContext(sc) 34 | import sqlCtx._ 35 | 36 | val airports = Airport(sqlCtx) 37 | airports.collect().foreach(println) 38 | println(airports.count()) 39 | println(airports.distinct().count()) 40 | 41 | sc.stop() 42 | 43 | } 44 | 45 | object WhereQueries extends App { 46 | 47 | val sparkConf = new SparkConf() 48 | .setAppName(this.getClass.getName) 49 | .setMaster("local[*]") 50 | val sc = new SparkContext(sparkConf) 51 | val sqlCtx = new SQLContext(sc) 52 | import sqlCtx._ 53 | import sqlCtx.implicits._ 54 | 55 | val airports = Airport(sqlCtx) 56 | airports.filter(airports("country") === "Czech Republic").select("id", "name", "city").show() 57 | 58 | sc.stop() 59 | 60 | } 61 | 62 | object AggregationQuery extends App { 63 | 64 | val sparkConf = new SparkConf() 65 | .setAppName(this.getClass.getName) 66 | .setMaster("local[*]") 67 | val sc = new SparkContext(sparkConf) 68 | val sqlCtx = new SQLContext(sc) 69 | import sqlCtx._ 70 | import sqlCtx.implicits._ 71 | 72 | val routes = Route(sqlCtx) 73 | routes.select(min(routes("stops")), max(routes("stops"))).show() 74 | 75 | sc.stop() 76 | 77 | } 78 | 79 | object GroupingQuery extends App { 80 | 81 | val sparkConf = new SparkConf() 82 | .setAppName(this.getClass.getName) 83 | .setMaster("local[*]") 84 | val sc = new SparkContext(sparkConf) 85 | val sqlCtx = new SQLContext(sc) 86 | import sqlCtx._ 87 | import sqlCtx.implicits._ 88 | 89 | val airports = Airport(sqlCtx) 90 | airports 91 | .select(airports("country"), airports("city")) 92 | .groupBy(airports("country"), airports("city")) 93 | .count().where($"count" >= 2).show() 94 | 95 | sc.stop() 96 | } 97 | -------------------------------------------------------------------------------- /src/main/scala/sw/df/JoinsInDF.scala: -------------------------------------------------------------------------------- 1 | package sw.df 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import org.apache.spark.sql.functions._ 6 | import org.apache.spark.sql.expressions._ 7 | import sw.air._ 8 | 9 | object JoinQueries extends App { 10 | 11 | val sparkConf = new SparkConf() 12 | .setAppName(this.getClass.getName) 13 | .setMaster("local[*]") 14 | val sc = new SparkContext(sparkConf) 15 | val sqlCtx = new SQLContext(sc) 16 | import sqlCtx._ 17 | 18 | val airlines = Airline(sqlCtx) 19 | val routes = Route(sqlCtx) 20 | 21 | airlines 22 | .join(routes, airlines("id") === routes("airlineId")) 23 | .select( 24 | airlines("name"), 25 | routes("sourceAirport").as("source"), 26 | routes("destinationAirport").as("destination") 27 | ) 28 | .show() 29 | 30 | sc.stop() 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/scala/sw/df/Json.scala: -------------------------------------------------------------------------------- 1 | package sw.df 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import org.apache.spark.sql.functions._ 6 | import org.apache.spark.sql.expressions._ 7 | import sw.air._ 8 | 9 | object JsonSchemaAndShow extends App { 10 | 11 | val sparkConf = new SparkConf() 12 | .setAppName(this.getClass.getName) 13 | .setMaster("local[*]") 14 | val sc = new SparkContext(sparkConf) 15 | val sqlCtx = new SQLContext(sc) 16 | import sqlCtx._ 17 | import sqlCtx.implicits._ 18 | 19 | val enron = sqlCtx.read.json("src/main/resources/enron/enron.json") 20 | enron.printSchema 21 | // enron.select($"date", $"sender", $"subject").filter($"subject" contains("year")).show() 22 | 23 | sc.stop() 24 | 25 | } 26 | 27 | object MoreStruct extends App { 28 | 29 | val sparkConf = new SparkConf() 30 | .setAppName(this.getClass.getName) 31 | .setMaster("local[*]") 32 | val sc = new SparkContext(sparkConf) 33 | val sqlCtx = new SQLContext(sc) 34 | import sqlCtx._ 35 | import sqlCtx.implicits._ 36 | 37 | val enron = sqlCtx.read.json("src/main/resources/enron/enron.json") 38 | enron.select($"date", $"sender", $"subject", explode($"to")).filter($"subject" contains("year")).show() 39 | 40 | sc.stop() 41 | } 42 | 43 | object ToJson extends App { 44 | 45 | val sparkConf = new SparkConf() 46 | .setAppName(this.getClass.getName) 47 | .setMaster("local[*]") 48 | val sc = new SparkContext(sparkConf) 49 | val sqlCtx = new SQLContext(sc) 50 | import sqlCtx._ 51 | import sqlCtx.implicits._ 52 | 53 | val enron = sqlCtx.read.json("src/main/resources/enron/enron.json") 54 | val reunion = enron.select($"date", $"sender", $"subject", explode($"to")).filter($"subject" contains("year")) 55 | reunion.toJSON.collect().foreach(println) 56 | 57 | sc.stop() 58 | } 59 | -------------------------------------------------------------------------------- /src/main/scala/sw/ds/DataSets.scala: -------------------------------------------------------------------------------- 1 | package sw.ds 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import org.apache.spark.sql.functions._ 6 | import org.apache.spark.sql.expressions._ 7 | import sw.air._ 8 | 9 | 10 | object Datasets extends App { 11 | 12 | val sparkConf = new SparkConf() 13 | .setAppName(this.getClass.getName) 14 | .setMaster("local[*]") 15 | val sc = new SparkContext(sparkConf) 16 | val sqlCtx = new SQLContext(sc) 17 | import sqlCtx._ 18 | import sqlCtx.implicits._ 19 | 20 | val airports = Airport(sqlCtx) 21 | 22 | airports.as[Airport].filter(_.country == "Czech Republic").show() 23 | 24 | 25 | 26 | sc.stop() 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/main/scala/sw/other/Loose.scala: -------------------------------------------------------------------------------- 1 | package sw.other 2 | 3 | import org.apache.spark._ 4 | 5 | object DontLooseMe extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | 11 | val sc = new SparkContext(sparkConf) 12 | 13 | val data1 = List((1, "a"), (2, "b"), (3, "c")) 14 | val data2 = List((0, "x"), (2, "y"), (4, "z")) 15 | 16 | val rdd1 = sc.parallelize(data1) 17 | val rdd2 = sc.parallelize(data2) 18 | 19 | val iMKinddaLost = rdd1.join(rdd2).collect().foreach(println) 20 | 21 | sc.stop() 22 | } 23 | -------------------------------------------------------------------------------- /src/main/scala/sw/other/SaveMeMaybe.scala: -------------------------------------------------------------------------------- 1 | package sw.other 2 | 3 | import org.apache.spark._ 4 | 5 | object Names extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("spark://garden.local:7077") 10 | .set("spark.eventLog.enabled", "true") 11 | val sc = new SparkContext(sparkConf) 12 | sc.setCheckpointDir("chpt") 13 | 14 | sc.addJar("target/scala-2.10/fat.jar") 15 | 16 | val partitioner = new HashPartitioner(16) 17 | 18 | val wc = sc.textFile("src/main/resources/all-shakespeare.txt") 19 | .map(_.toLowerCase()) 20 | .flatMap(_.split("""\W+""")) 21 | .map(w => (w, 1)) 22 | .reduceByKey(_ + _) 23 | .cache() 24 | 25 | def names(path: String) = sc 26 | .textFile(path) 27 | .map(_.toLowerCase()) 28 | .map(_.split("""\W+""")) 29 | .map(arr => (arr(0), arr(5))) 30 | 31 | val maleNames = names("src/main/resources/male-names.txt") 32 | maleNames.setName("maleNames-rdd") 33 | val maleFreq = maleNames.join(wc) 34 | 35 | val femaleNames = names("src/main/resources/female-names.txt") 36 | femaleNames.setName("femaleNames-rdd") 37 | val femaleFreq = femaleNames.join(wc) 38 | 39 | val all = femaleFreq ++ maleFreq 40 | all.setName("all-rdd") 41 | 42 | all.collect().foreach(println) 43 | 44 | sc.stop() 45 | } 46 | -------------------------------------------------------------------------------- /src/main/scala/sw/pairrdds/CompilationError.scala: -------------------------------------------------------------------------------- 1 | package sw.pairrdds 2 | 3 | import org.apache.spark.{SparkConf, SparkContext} 4 | 5 | object ThisWillNotCompile extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | val sc = new SparkContext(sparkConf) 11 | 12 | val allShakespeare = sc.textFile("src/main/resources/all-shakespeare.txt") 13 | 14 | val weird = allShakespeare 15 | // .reduceByKey { 16 | // case (acc, length) => acc + length 17 | // } 18 | 19 | weird.take(5).foreach(println) 20 | 21 | sc.stop() 22 | } 23 | -------------------------------------------------------------------------------- /src/main/scala/sw/pairrdds/GuessingStages.scala: -------------------------------------------------------------------------------- 1 | package sw.pairrdds 2 | 3 | import org.apache.spark._ 4 | 5 | object StagesStagesA extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | 11 | val sc = new SparkContext(sparkConf) 12 | 13 | val all = sc.textFile("src/main/resources/all-shakespeare.txt") 14 | 15 | sc.stop() 16 | } 17 | 18 | object StagesStagesB extends App { 19 | 20 | val sparkConf = new SparkConf() 21 | .setAppName(this.getClass.getName) 22 | .setMaster("local[*]") 23 | 24 | val sc = new SparkContext(sparkConf) 25 | 26 | val weirdo = sc.textFile("src/main/resources/all-shakespeare.txt") 27 | .map(_.toUpperCase()) 28 | .groupBy(_.size) 29 | .mapValues(_.size) 30 | 31 | sc.stop() 32 | } 33 | 34 | object StagesStagesC extends App { 35 | 36 | val sparkConf = new SparkConf() 37 | .setAppName(this.getClass.getName) 38 | .setMaster("local[*]") 39 | 40 | 41 | val sc = new SparkContext(sparkConf) 42 | 43 | val priors = sc.parallelize(List( 44 | ('a', 100), 45 | ('b', 200) 46 | )) 47 | 48 | val abs = sc.textFile("src/main/resources/all-shakespeare.txt") 49 | .filter(line => line.trim != "") 50 | .map(_.toLowerCase()) 51 | .groupBy(_.charAt(0)) 52 | .filter { 53 | case (c, lines) => c == 'a' || c == 'b' 54 | } 55 | 56 | val theFinal = abs.join(priors) 57 | 58 | sc.stop() 59 | 60 | } 61 | -------------------------------------------------------------------------------- /src/main/scala/sw/pairrdds/Startings.scala: -------------------------------------------------------------------------------- 1 | package sw.pairrdds 2 | 3 | import org.apache.spark._ 4 | 5 | object Startings extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | val sc = new SparkContext(sparkConf) 11 | 12 | val allShakespeare = sc.textFile("src/main/resources/all-shakespeare.txt") 13 | 14 | val startings = allShakespeare 15 | .filter(_.trim != "") 16 | .map(line => (line.charAt(0), line)) 17 | .mapValues(_.size) 18 | .reduceByKey { 19 | case (acc, length) => acc + length 20 | } 21 | 22 | startings.take(5).foreach(println) 23 | 24 | sc.stop() 25 | } 26 | 27 | object Startings2 extends App { 28 | 29 | val sparkConf = new SparkConf() 30 | .setAppName(this.getClass.getName) 31 | .setMaster("local[*]") 32 | val sc = new SparkContext(sparkConf) 33 | 34 | val allShakespeare = sc.textFile("src/main/resources/all-shakespeare.txt") 35 | 36 | val startings = allShakespeare 37 | .filter(_.trim != "") 38 | .groupBy(_.charAt(0)) 39 | .mapValues(_.size) 40 | .reduceByKey { 41 | case (acc, length) => acc + length 42 | } 43 | 44 | startings.take(5).foreach(println) 45 | 46 | sc.stop() 47 | } 48 | 49 | -------------------------------------------------------------------------------- /src/main/scala/sw/partitioner/UsingPartitioner.scala: -------------------------------------------------------------------------------- 1 | package sw.partitioner 2 | 3 | import org.apache.spark._ 4 | 5 | object Partitioner1 extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | val sc = new SparkContext(sparkConf) 11 | 12 | val partitioner = new HashPartitioner(16) 13 | 14 | val allShakespeare = sc.textFile("src/main/resources/all-shakespeare.txt") 15 | .map(line => (line, line.length())) 16 | 17 | allShakespeare.take(5).foreach(println) 18 | 19 | sc.stop() 20 | } 21 | 22 | object Partitioner2 extends App { 23 | 24 | val sparkConf = new SparkConf() 25 | .setAppName(this.getClass.getName) 26 | .setMaster("local[*]") 27 | val sc = new SparkContext(sparkConf) 28 | 29 | val partitioner = new HashPartitioner(16) 30 | 31 | val allShakespeare = sc.textFile("src/main/resources/all-shakespeare.txt") 32 | 33 | val startings = allShakespeare 34 | .filter(_.trim != "") 35 | .groupBy(_.charAt(0)) 36 | .mapValues(_.size) 37 | .reduceByKey(_ + _) 38 | 39 | startings.take(5).foreach(println) 40 | 41 | sc.stop() 42 | } 43 | 44 | object Join extends App { 45 | 46 | val sparkConf = new SparkConf() 47 | .setAppName(this.getClass.getName) 48 | .setMaster("spark://localhost:7077") 49 | .set("spark.eventLog.enabled", "true") 50 | val sc = new SparkContext(sparkConf) 51 | sc.addJar("target/scala-2.10/fat.jar") 52 | 53 | def wc = sc.textFile("src/main/resources/all-shakespeare.txt") 54 | .flatMap(_.split("""\W+""")) 55 | .map(_.toLowerCase()) 56 | .map(w => (w, 1)) 57 | .reduceByKey(_ + _) 58 | .map(identity) 59 | 60 | def heros = sc.textFile("src/main/resources/all-shakespeare.txt") 61 | .flatMap(_.split("""\W+""")) 62 | .map(_.toLowerCase()) 63 | .filter(word => word == "juliet" || word == "romeo") 64 | .map { 65 | case "juliet" => ("juliet", 100) 66 | case "romeo" => ("romeo", 200) 67 | } 68 | 69 | val join = wc.join(heros) 70 | 71 | join.collect().foreach(println) 72 | 73 | sc.stop() 74 | 75 | } 76 | 77 | -------------------------------------------------------------------------------- /src/main/scala/sw/rdds/OnlyJuliet.scala: -------------------------------------------------------------------------------- 1 | package sw.rdds 2 | 3 | import org.apache.spark._ 4 | 5 | object OnlyJuliet extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | val sc = new SparkContext(sparkConf) 11 | 12 | val all = sc.textFile("src/main/resources/all-shakespeare.txt") 13 | val onlyJuliet = all.filter(_.contains("JULIET")) 14 | 15 | onlyJuliet.collect.foreach(println) 16 | 17 | sc.stop() 18 | 19 | } 20 | 21 | -------------------------------------------------------------------------------- /src/main/scala/sw/rdds/SomeOperations.scala: -------------------------------------------------------------------------------- 1 | package sw.rdds 2 | 3 | import org.apache.spark._ 4 | 5 | object SomeTransformations extends App { 6 | 7 | val sparkConf = new SparkConf() 8 | .setAppName(this.getClass.getName) 9 | .setMaster("local[*]") 10 | val sc = new SparkContext(sparkConf) 11 | 12 | val evenNumbers = sc.parallelize(1 to 1000).filter(_ % 2 == 0) 13 | 14 | println("sum: " + evenNumbers.reduce(_ + _)) 15 | println("first even: " + evenNumbers.first) 16 | println("Printing all even, that can be divided by 150") 17 | println(evenNumbers.filter(_ % 150 == 0).foreach(n => println(s"Hey I'm $n and I can be divided by 150!'"))) 18 | 19 | sc.stop() 20 | } 21 | 22 | object SomeActions extends App { 23 | 24 | val sparkConf = new SparkConf() 25 | .setAppName(this.getClass.getName) 26 | .setMaster("local[*]") 27 | val sc = new SparkContext(sparkConf) 28 | 29 | val evenNumbers = sc.parallelize(1 to 1000).filter(_ % 2 == 0) 30 | 31 | println("sum: " + evenNumbers.reduce(_ + _)) 32 | println("first even: " + evenNumbers.first) 33 | println("Printing all even, that can be divided by 150") 34 | println(evenNumbers.filter(_ % 150 == 0).foreach(n => println(s"Hey I'm $n and I can be divided by 150!'"))) 35 | 36 | sc.stop() 37 | } 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/scala/sw/serialization/SerializationIssues.scala: -------------------------------------------------------------------------------- 1 | package sw.serialization 2 | 3 | import org.apache.spark._ 4 | 5 | case class User(name: String) 6 | 7 | object SerializationIssues extends App { 8 | 9 | val sparkConf = new SparkConf() 10 | .setAppName(this.getClass.getName) 11 | .setMaster("spark://garden.local:7077") 12 | val sc = new SparkContext(sparkConf) 13 | 14 | val five = sc 15 | .parallelize(List("john", "mike", "kate", "anna")) 16 | .take(5) 17 | .foreach(println) 18 | 19 | sc.stop() 20 | } 21 | 22 | class Simple { 23 | 24 | def iTakeLambda(lambda: Int => String): String = { 25 | // val lambda: Int => String = a => a.toString 26 | lambda(10) 27 | } 28 | 29 | iTakeLambda(a => a.toString()) 30 | } 31 | 32 | -------------------------------------------------------------------------------- /src/main/scala/sw/sql/FirstLoads.scala: -------------------------------------------------------------------------------- 1 | package sw.sql 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import sw.air._ 6 | 7 | object LoadAndSchema extends App { 8 | 9 | val sparkConf = new SparkConf() 10 | .setAppName(this.getClass.getName) 11 | .setMaster("local[*]") 12 | val sc = new SparkContext(sparkConf) 13 | val sqlCtx = new SQLContext(sc) 14 | import sqlCtx._ 15 | 16 | val airports = Airport(sqlCtx) 17 | 18 | airports.printSchema 19 | // airports.show() 20 | sc.stop() 21 | 22 | } 23 | 24 | object SimpleQueries extends App { 25 | 26 | val sparkConf = new SparkConf() 27 | .setAppName(this.getClass.getName) 28 | .setMaster("local[*]") 29 | val sc = new SparkContext(sparkConf) 30 | val sqlCtx = new SQLContext(sc) 31 | import sqlCtx._ 32 | 33 | val airports = Airport(sqlCtx) 34 | airports.registerTempTable("airports") 35 | 36 | sqlCtx.sql("select * from airports").collect().foreach(println) 37 | // sqlCtx.sql("select count(*) from airports").collect().foreach(println) 38 | // sqlCtx.sql("select count(distinct country) from airports").collect().foreach(println) 39 | 40 | sc.stop() 41 | } 42 | 43 | object WhereClauseQueries extends App { 44 | 45 | val sparkConf = new SparkConf() 46 | .setAppName(this.getClass.getName) 47 | .setMaster("local[*]") 48 | val sc = new SparkContext(sparkConf) 49 | val sqlCtx = new SQLContext(sc) 50 | import sqlCtx._ 51 | 52 | val airports = Airport(sqlCtx) 53 | airports.registerTempTable("airports") 54 | 55 | val all = sqlCtx.sql("select * from airports") 56 | all.collect().foreach(println) 57 | 58 | val result = sqlCtx.sql("select id, name, city from airports where country = 'Czech Republic'") 59 | result.collect().foreach(println) 60 | // result.show() 61 | 62 | sc.stop() 63 | 64 | } 65 | 66 | object AggregationQuery extends App { 67 | 68 | val sparkConf = new SparkConf() 69 | .setAppName(this.getClass.getName) 70 | .setMaster("local[*]") 71 | val sc = new SparkContext(sparkConf) 72 | val sqlCtx = new SQLContext(sc) 73 | import sqlCtx._ 74 | 75 | val routes = Route(sqlCtx) 76 | routes.registerTempTable("routes") 77 | 78 | sqlCtx.sql("select min(stops) as min_stops, max(stops) as max_stops from routes").show() 79 | // sqlCtx.sql("select stops from routes group by stops").show() 80 | 81 | sc.stop() 82 | 83 | } 84 | 85 | object GroupingQuery extends App { 86 | 87 | val sparkConf = new SparkConf() 88 | .setAppName(this.getClass.getName) 89 | .setMaster("local[*]") 90 | val sc = new SparkContext(sparkConf) 91 | val sqlCtx = new SQLContext(sc) 92 | import sqlCtx._ 93 | 94 | val airports = Airport(sqlCtx) 95 | airports.registerTempTable("airports") 96 | 97 | sqlCtx.sql("select country, city, count(*) as no_airports from airports group by country, city having count(*) >= 2").show() 98 | 99 | sc.stop() 100 | } 101 | 102 | -------------------------------------------------------------------------------- /src/main/scala/sw/sql/Hive.scala: -------------------------------------------------------------------------------- 1 | package sw.sql 2 | 3 | import java.io.File 4 | import org.apache.spark._ 5 | import org.apache.spark.sql.SQLContext 6 | import org.apache.spark.sql.hive.HiveContext 7 | import sw.air._ 8 | import sw.utils.FileUtil 9 | 10 | object MetaStore { 11 | def clean(): Unit = { 12 | val metaStoreFile = new File("/Users/rabbit/projects/spark-workshop/metastore_db") 13 | if (metaStoreFile.exists()) { 14 | println("deleting metastore") 15 | FileUtil.delete(metaStoreFile) 16 | } 17 | } 18 | 19 | def createKjV(hiveCtx: HiveContext): Unit = { 20 | val kjvPath = "/Users/rabbit/projects/spark-workshop/src/main/resources/kjv" 21 | hiveCtx.sql(s""" 22 | CREATE EXTERNAL TABLE IF NOT EXISTS kjv ( 23 | book STRING, 24 | chapter INT, 25 | verse INT, 26 | text STRING) 27 | ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 28 | LOCATION '$kjvPath' 29 | """) 30 | } 31 | } 32 | 33 | object HiveLoadExternal extends App { 34 | 35 | MetaStore.clean() 36 | val sparkConf = new SparkConf() 37 | .setAppName(this.getClass.getName) 38 | .setMaster("local[*]") 39 | val sc = new SparkContext(sparkConf) 40 | val hiveCtx = new HiveContext(sc) 41 | import hiveCtx._ 42 | 43 | MetaStore.createKjV(hiveCtx) 44 | sql("show tables").show() 45 | sql("select count(*) from kjv").show() 46 | 47 | sc.stop() 48 | 49 | } 50 | 51 | object HiveVersePerBook extends App { 52 | 53 | MetaStore.clean() 54 | val sparkConf = new SparkConf() 55 | .setAppName(this.getClass.getName) 56 | .setMaster("local[*]") 57 | val sc = new SparkContext(sparkConf) 58 | val hiveCtx = new HiveContext(sc) 59 | import hiveCtx._ 60 | 61 | MetaStore.createKjV(hiveCtx) 62 | sql(""" 63 | SELECT * FROM ( 64 | SELECT book, COUNT(*) AS count FROM kjv GROUP BY book) bc 65 | WHERE bc.book != '' 66 | ORDER by count DESC 67 | """).show() 68 | 69 | sc.stop() 70 | 71 | } 72 | 73 | object HiveGodMentioned extends App { 74 | 75 | MetaStore.clean() 76 | val sparkConf = new SparkConf() 77 | .setAppName(this.getClass.getName) 78 | .setMaster("local[*]") 79 | val sc = new SparkContext(sparkConf) 80 | val hiveCtx = new HiveContext(sc) 81 | import hiveCtx._ 82 | 83 | MetaStore.createKjV(hiveCtx) 84 | sql("SELECT * FROM kjv WHERE text LIKE '%Jehovah%' OR text LIKE '%JEHOVAH%'").show() 85 | 86 | sc.stop() 87 | 88 | } 89 | 90 | 91 | -------------------------------------------------------------------------------- /src/main/scala/sw/sql/Joins.scala: -------------------------------------------------------------------------------- 1 | package sw.sql 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.sql.SQLContext 5 | import sw.air._ 6 | 7 | object JoinQueries extends App { 8 | 9 | val sparkConf = new SparkConf() 10 | .setAppName(this.getClass.getName) 11 | .setMaster("local[*]") 12 | val sc = new SparkContext(sparkConf) 13 | val sqlCtx = new SQLContext(sc) 14 | import sqlCtx._ 15 | 16 | val airlines = Airline(sqlCtx) 17 | airlines.registerTempTable("airlines") 18 | 19 | val routes = Route(sqlCtx) 20 | routes.registerTempTable("routes") 21 | 22 | sql("""select a.name, r.sourceAirport as source, r.destinationAirport as destination 23 | from airlines a join routes r 24 | on a.id = r.airlineId""").show() 25 | 26 | sc.stop() 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/Effective.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.streaming.StreamingContext 5 | import org.apache.spark.streaming.StreamingContext._ 6 | import org.apache.spark.streaming.dstream.DStream 7 | import org.apache.spark.streaming.Duration 8 | import org.apache.spark.streaming.Seconds 9 | 10 | object Effective extends App { 11 | 12 | val sparkConf = new SparkConf() 13 | .setAppName(this.getClass.getName) 14 | .setMaster("local[*]") 15 | val sc = new SparkContext(sparkConf) 16 | 17 | val interval = 10 18 | val ssc = new StreamingContext(sc, Seconds(interval)) 19 | ssc.checkpoint("checkpoint") 20 | 21 | val lines = ssc.socketTextStream("localhost", 9999) 22 | 23 | lines.flatMap(_.split("""\W+""")) 24 | .map(w => (w, 1)) 25 | .reduceByKeyAndWindow(_ + _, _ - _, Seconds(interval * 3) 26 | ) 27 | .print() 28 | 29 | ssc.start() 30 | 31 | ssc.awaitTermination() 32 | } 33 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/Kafka.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | /* 3 | import org.apache.spark._ 4 | import org.apache.spark.streaming.StreamingContext 5 | import org.apache.spark.streaming.StreamingContext._ 6 | import org.apache.spark.streaming.dstream.DStream 7 | import org.apache.spark.streaming.Duration 8 | import org.apache.spark.streaming.Seconds 9 | import org.apache.spark.streaming.kafka._ 10 | */ 11 | object Kafka extends App { 12 | 13 | /* 14 | val sparkConf = new SparkConf() 15 | .setAppName(this.getClass.getName) 16 | .setMaster("local[*]") 17 | val interval = 10 18 | val sc = new SparkContext(sparkConf) 19 | val ssc = new StreamingContext(sc, Seconds(interval)) 20 | ssc.checkpoint("checkpoint") 21 | 22 | 23 | val topics = Map("test" -> 1) 24 | val zkQuorum = "localhost:2181" 25 | val group = "1" 26 | val topicLines = KafkaUtils.createStream(ssc, zkQuorum, group, topics) 27 | topicLines.map(_._2).print() 28 | 29 | ssc.start() 30 | 31 | ssc.awaitTermination() 32 | sc.stop() 33 | */ 34 | } 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/ReadingFromDirectory.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.streaming.StreamingContext 5 | import org.apache.spark.streaming.StreamingContext._ 6 | import org.apache.spark.streaming.dstream.DStream 7 | import org.apache.spark.streaming.Duration 8 | import org.apache.spark.streaming.Seconds 9 | 10 | object ReadingFromDirectory extends App { 11 | 12 | val sparkConf = new SparkConf() 13 | .setAppName(this.getClass.getName) 14 | .setMaster("local[*]") 15 | val sc = new SparkContext(sparkConf) 16 | 17 | val ssc = new StreamingContext(sc, Seconds(10)) 18 | val logs = ssc.textFileStream("src/main/resources/logs/") 19 | 20 | logs.print() 21 | 22 | ssc.start() 23 | 24 | ssc.awaitTermination() 25 | } 26 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/SimpleStreaming.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.streaming.StreamingContext 5 | import org.apache.spark.streaming.StreamingContext._ 6 | import org.apache.spark.streaming.dstream.DStream 7 | import org.apache.spark.streaming.Duration 8 | import org.apache.spark.streaming.Seconds 9 | 10 | object SimpleStreaming extends App { 11 | 12 | val sparkConf = new SparkConf() 13 | .setAppName(this.getClass.getName) 14 | .setMaster("local[*]") 15 | val sc = new SparkContext(sparkConf) 16 | 17 | val ssc = new StreamingContext(sc, Seconds(10)) 18 | val lines = ssc.socketTextStream("localhost", 9999) 19 | 20 | lines.print() 21 | 22 | ssc.start() 23 | 24 | ssc.awaitTermination() 25 | } 26 | 27 | object SimpleStreaming2 extends App { 28 | 29 | val sparkConf = new SparkConf() 30 | .setAppName(this.getClass.getName) 31 | .setMaster("local[*]") 32 | val sc = new SparkContext(sparkConf) 33 | 34 | val ssc = new StreamingContext(sc, Seconds(10)) 35 | val lines = ssc.socketTextStream("localhost", 9999) 36 | 37 | lines.count().print() 38 | 39 | ssc.start() 40 | 41 | ssc.awaitTermination() 42 | } 43 | 44 | object SimpleStreaming3 extends App { 45 | 46 | val sparkConf = new SparkConf() 47 | .setAppName(this.getClass.getName) 48 | .setMaster("local[*]") 49 | val sc = new SparkContext(sparkConf) 50 | 51 | val ssc = new StreamingContext(sc, Seconds(10)) 52 | val lines = ssc.socketTextStream("localhost", 9999) 53 | 54 | val upperW = lines.map(_.toUpperCase()).filter(_.startsWith("W")) 55 | upperW.print() 56 | 57 | ssc.start() 58 | 59 | ssc.awaitTermination() 60 | } 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/Transformer.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.rdd.RDD 5 | import org.apache.spark.streaming.StreamingContext 6 | import org.apache.spark.streaming.StreamingContext._ 7 | import org.apache.spark.streaming.dstream.DStream 8 | import org.apache.spark.streaming.Duration 9 | import org.apache.spark.streaming.Seconds 10 | 11 | object BatchProcessing { 12 | 13 | def wc(rdd: RDD[String]) = 14 | rdd.map(_.toLowerCase()) 15 | .flatMap(_.split("""\W+""")) 16 | .map(w => (w, 1)) 17 | .reduceByKey(_ + _) 18 | 19 | } 20 | 21 | object Transformer extends App { 22 | 23 | val sparkConf = new SparkConf() 24 | .setAppName(this.getClass.getName) 25 | .setMaster("local[*]") 26 | val sc = new SparkContext(sparkConf) 27 | 28 | val ssc = new StreamingContext(sc, Seconds(10)) 29 | val lines = ssc.socketTextStream("localhost", 9999) 30 | 31 | val wc = lines.transform { rdd => 32 | BatchProcessing.wc(rdd) 33 | } 34 | 35 | wc.print() 36 | 37 | ssc.start() 38 | 39 | ssc.awaitTermination() 40 | } 41 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/UpdateState.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import java.util.Date 4 | import org.apache.spark._ 5 | import org.apache.spark.streaming.StreamingContext 6 | import org.apache.spark.streaming.StreamingContext._ 7 | import org.apache.spark.streaming.dstream.DStream 8 | import org.apache.spark.streaming.Duration 9 | import org.apache.spark.streaming.Seconds 10 | 11 | case class UserState(visited: List[String]) { 12 | override def toString = s"visited: $visited" 13 | } 14 | 15 | object UpdateState extends App { 16 | 17 | val sparkConf = new SparkConf() 18 | .setAppName(this.getClass.getName) 19 | .setMaster("local[*]") 20 | val sc = new SparkContext(sparkConf) 21 | 22 | val interval = 10 23 | val ssc = new StreamingContext(sc, Seconds(interval)) 24 | ssc.checkpoint("checkpoint") 25 | 26 | val logs = ssc.socketTextStream("localhost", 9999) 27 | 28 | val pagesPerUser = logs.map { 29 | case line => 30 | val date :: id :: page :: Nil = line.split(" - ").toList 31 | (id, page) 32 | } 33 | 34 | val update = (pages: Seq[String], maybeState: Option[UserState]) => maybeState match { 35 | case None => Some(UserState(pages.toList)) 36 | case Some(state) => Some(state.copy(visited = pages.toList ++ state.visited)) 37 | } 38 | 39 | val sessions = pagesPerUser.updateStateByKey(update) 40 | 41 | sessions.print() 42 | 43 | ssc.start() 44 | 45 | ssc.awaitTermination() 46 | } 47 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/WebPageLogsGenerator.scala: -------------------------------------------------------------------------------- 1 | import java.io.IOException 2 | import java.io.PrintWriter 3 | import java.net.ServerSocket 4 | import java.net.Socket 5 | import java.util.Date 6 | import scala.util.Random 7 | 8 | object WebPageLogsGenerator extends App { 9 | 10 | val ids = (1 to 10).toList 11 | val pages = List("/", "/login", "/profile", "/dashboard", "/profile/edit") 12 | 13 | val listener = new ServerSocket(9999) 14 | var socket: Socket = null 15 | try { 16 | socket = listener.accept(); 17 | while (true) { 18 | val out: PrintWriter = new PrintWriter(socket.getOutputStream(), true); 19 | out.println(generateLog()) 20 | Thread.sleep(args(0).toInt) 21 | 22 | } 23 | } finally { 24 | socket.close(); 25 | listener.close(); 26 | } 27 | 28 | def generateLog(): String = { 29 | val date = new Date().toString 30 | val id = ids((System.nanoTime % ids.length).toInt).toString 31 | val page = pages((System.nanoTime % pages.length).toInt).toString 32 | s"$date - $id - $page" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/scala/sw/streaming/Windows.scala: -------------------------------------------------------------------------------- 1 | package sw.streaming 2 | 3 | import org.apache.spark._ 4 | import org.apache.spark.streaming.StreamingContext 5 | import org.apache.spark.streaming.StreamingContext._ 6 | import org.apache.spark.streaming.dstream.DStream 7 | import org.apache.spark.streaming.Duration 8 | import org.apache.spark.streaming.Seconds 9 | 10 | object Windows extends App { 11 | 12 | val sparkConf = new SparkConf() 13 | .setAppName(this.getClass.getName) 14 | .setMaster("local[*]") 15 | val sc = new SparkContext(sparkConf) 16 | 17 | val interval = 10 18 | val ssc = new StreamingContext(sc, Seconds(interval)) 19 | ssc.checkpoint("checkpoint") 20 | 21 | val lines = ssc.socketTextStream("localhost", 9999) 22 | val windowed = lines.window(Seconds(interval * 3)) 23 | 24 | windowed.flatMap(_.split("""\W+""")) 25 | .map(w => (w, 1)) 26 | .reduceByKey(_ + _) 27 | .print() 28 | 29 | ssc.start() 30 | 31 | ssc.awaitTermination() 32 | } 33 | -------------------------------------------------------------------------------- /src/main/scala/sw/utils/FileUtil.scala: -------------------------------------------------------------------------------- 1 | package sw.utils 2 | 3 | import java.io._ 4 | import scala.io.Source 5 | 6 | object FileUtil { 7 | 8 | def delete(f: File): Unit = { 9 | if (f.isDirectory()) { 10 | f.listFiles().foreach { 11 | sf => delete(sf) 12 | } 13 | } 14 | if (!f.delete()) 15 | throw new FileNotFoundException("Failed to delete file: " + f); 16 | } 17 | } 18 | --------------------------------------------------------------------------------