Spark学习之六-RDD编程进阶(少)

来源:互联网 发布:剪歌软件 编辑:程序博客网 时间:2024/04/27 17:33
共享变量
1.累加器
val blanklines=sc.accumulator(0) 创建Accumulator[Int]并初始化为0
案例:
计算空行:
val records=sc.textFile("11.txt")//读取文件
val blank_counts=sc.accumulator(0),创建行记录并初始化为0
val record=records.flatMap(line=>{
if(line == ""){//空行判断
blank_count += 1}//进行叠加
line.split(" ")分割字符
)
record.saveAsTextFile("/temp/")
blank_count// 由于flatMap是惰性计算的,只有在saveAsTextFile操作之后才会进行计算

总结:累加器的用法
①首先创建具有初始值的sc.accumulator(0)累加器
②在闭包的执行器代码中使用累加器的+=方法增加累加器的值
③驱动器可以调用累加器的value方法访问他的值

2.广播变量
向每个节点只发送一次变量
val sim=sc.broadcast(...)

3.外部程序间的管道
使用pie()去调用外部程序
val distScript="./test.R"
val distScriptName="text.R"
sc.addFile(distScript) //构建一个文件列表,让每个工作节点在Spark作业中下载列表的文件。这些文件可以来自驱动器的本地文件系统,也可以来自HDFS。。。
val distances=contacts.values.flatMap(x=>x.map(....)).pipe(Seq(SparkFiles.get(distScriptName)))





原创粉丝点击