Spark wordcount

wordcount实现过程:

1、首先读取文件sc.textfile("path"),可以是本地文件,也可以是hdfs上的文件

2、首先进行扁平化操作,利用flatmap,将数据挤压出来

hello,dwj1             hello

hello,dwj2    =====>     dwj1

hello,dwj3             hello

                    dwj2

                    hello

                    dwj3

3、然后对数据进行map操作,将其转化为(key,value)形式

(hello,1)

(hello,1)

(hello,1)

(dwj1,1)

(dwj2,1)

(dwj3,1)

4、最后进行reduceByKey操作,内部首先进行的是groupByKey,所有肯定有shuffle过程,有重分区过程。在map端进行了一次combiner,所以如果只有一个partition,在map端进行一次combiner的时候就得到了结果。

(hello,3)

(dwj1,1)

(dwj2,1)

(dwj3,1)

5、得到最后的输出,一个partition由一个task执行。

6、实际代码

package SparkStreaming;

import org.apache.commons.collections.iterators.ArrayListIterator;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.*;
import scala.Tuple2;

import java.util.Iterator;

public class wordcount {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf()
                .setMaster("local")
                .setAppName("wordcount");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> stringJavaRDD = sc.textFile("E:/2018_cnic/learn/wordcount.txt");
        JavaRDD<String> stringJavaRDD1 = stringJavaRDD.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterator<String> call(String s) throws Exception {
                return new ArrayListIterator(s.split(" "));
            }
        });
        JavaPairRDD<String, Integer> stringIntegerJavaPairRDD = stringJavaRDD1.mapToPair(new PairFunction<String, String, Integer>() {
            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2<String, Integer>(s, 1);
            }
        });
        JavaPairRDD<String, Integer> stringIntegerJavaPairRDD1 = stringIntegerJavaPairRDD.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer integer1, Integer integer2) throws Exception {
                return integer1 + integer2;
            }
        });
        stringIntegerJavaPairRDD1.foreach(new VoidFunction<Tuple2<String, Integer>>() {
            @Override
            public void call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
                System.out.println(stringIntegerTuple2._1+"——————"+stringIntegerTuple2._2);
            }
        });
    }
}

输出结果

Spark——————2
19——————1
util.log:——————1
platform...——————1
permissions:——————3
'sparkMaster'——————1
8080.——————1
type——————1
library——————1
INFO——————17
19/04/24——————18
See——————1
spark://master1:7077——————1
'MasterUI'——————1
25——————1
signal——————3
for——————5
Changing——————4
13——————1
24——————1
WARN——————1
version——————1
11——————1
explanation.——————1
your——————1
acls——————5
Unable——————1
23——————1
load——————1
util.SignalUtils:——————3
process——————1
20——————1
SLF4J:——————6
Set()——————1
5——————1
18——————1
Actual——————1
server.Server:——————2
INT——————1
multiple——————1
56130C——————1
HUP——————1
started——————2
22——————1
26——————1
path——————1
bindings.——————1
an——————1
builtin-java——————1
105L,——————1
[org.slf4j.impl.Log4jLoggerFactory]——————1
2.3.0——————1
[jar:file:/opt/workspace/hbase-1.4.6/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]——————1
@1280ms——————1
per——————1
name:——————1
http://www.slf4j.org/codes.html#multiple_bindings——————1
4——————1
14——————1
Registered——————3
is——————1
SLF4J——————1
Found——————3
master.Master:——————3
spark.SecurityManager:——————5
7——————1
authentication——————1
modify——————4
Successfully——————2
util.NativeCodeLoader:——————1
6——————1
[jar:file:/opt/workspace/hive-3.1.0/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]——————1
on——————2
with——————5
service——————2
16——————1
groups——————4
at——————1
in——————3
9——————1
classes——————1
using——————1
443265@master1——————1
7077.——————1
Class——————1
missions:——————1
@1326ms——————1
Logging——————1
root——————2
util.Utils:——————2
native-hadoop——————1
port——————2
Set(root);——————2
Running——————1
view——————4
10——————1
to:——————4
binding——————4
ui——————1
8——————1
disabled;——————2
Set();——————1
contains——————1
21——————1
ServerConnector@1cbf22af{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}——————1
15——————1
14:23:51——————14
SecurityManager:——————1
Started——————3
initialized——————1
master——————1
to——————1
"spark-root-org.apache.spark.deploy.master.Master-1-master1.out"——————1
applicable——————1
——————34
handler——————3
of——————1
TERM——————1
where——————1
17——————1
daemon——————1
12——————1
users——————2
server.AbstractConnector:——————1
[jar:file:/opt/workspace/hadoop-2.9.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]——————1
Starting——————1
14:23:50——————4
jetty-9.3.z-SNAPSHOT——————1
posted @ 2019-04-29 11:37  Angel_jing  阅读(185)  评论(0编辑  收藏  举报