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()【对列进行重命名】