Spark(二)

一、广播变量与累加器

1.广播变量机制

  将传递给task的值,变成传递给executor。

  为什么可以共用,因为task是executor下的线程。

  只读的变量,在task中不允许修改

2.累加器介绍

  在只写的变量,在task中只允许被修改,不允许读的操作。

  但是在driver中就只能读操作。

广播变量:>>> broadcastVar = sc.broadcast([1, 2, 3])

累加器:

>>> accum = sc.accumulator(0)

>>> sc.parallelize([1, 2, 3, 4]).foreach(lambda x : accum.add(x))

>>> accum.value

 

 

一个wordcount程序:

>>>textFile=sc.textFile('file:///root/app/spark-2.3.0-bin-hadoop2.6/languidcode/wordcount/word.txt')

>>>wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda word: (word,1)).reduceByKey(lambda a, b : a + b)

>>> wordCOunt.collect()

 

二、map与flatMap的区别

map与flatMap的区别

map:获取一个新元素(list原来有几个元素还是输出几个元素)

flatmap:获取一个或者多个新元素,拍扁,可乐罐所有单词都被拍出来。

flatMap(一条记录变n条(n>=0))

val rdd = sc.parallelize(List("coffee panda","happy panda","happiest panda party"))

JavaRDD<String> words = rdd.flatMap(x -> Arrays.asList(x.split(" ")) );

res8: Array[String] = Array(coffee, panda, happy, panda, happiest, panda, party)
 

 

三、dataframe创建

spark=SparkSession.builder.getOrCreate()
df=sc.textFile("file:////root/app/spark-2.3.0-bin-hadoop2.6/examples/src/main/resources/people.json")
df.show()
df.printSchema()【打印模式信息】
df.select(df.name,df.age + 1).show()【选择多列】
df.filter(df.age > 20 ).show()【条件过滤】
df.groupBy("age").count().show()【分组聚合】
df.sort(df.age.desc()).show()【排序】
df.sort(df.age.desc(), df.name.asc()).show()【多列排序】
df.select(df.name.alias("username"),df.age).show()【对列进行重命名】

 

posted @ 2019-08-26 10:39  Languid  阅读(131)  评论(0编辑  收藏  举报