val file=sc.textFile(“D:/BigDataTools/helloworld.txt”)
//内置对象sc,去加载一个文件
//懒加载,不会立即去加载file这个文件,所以这一步文件名写错了也不会报错
val rdd=file.flatMap(line=>line.split(" “)).map(word=>(word,1)).reduceByKey(+)
//它也不会立即执行。
rdd.collect()
rdd.foreach(println)
分步执行
//val rdd1=file.flatMap(line=>line.split(” "))flatMap执行的操作是按空格分割,形成一个列表
//val rdd2=rdd1.map(word=>(word,1)) map操作是按照键值对的形式显示
//val rdd3=rdd2.reduceByKey(+)
实验二:
import scala.math.random
val num=500000;
val numRdd=sc.parallelize(1 to num)
val count=numRdd.map{
n=>{
val x=random2-1
val y=random2-1
if(xx+yy<1)
1
else
0
}
}reduce(+)
println(4.0*count/num)
实验三:数据去重
val rdd=sc.makeRDD(Array(“2012-3-7 a”,“2012-3-7 a”,“2012-3-7 b”,“2012-3-7 a”,“2012-3-7 b”))
rdd.filter(_.trim().length>0).map(line=>(line,trim,"")).groupByKey().sortByKey().keys.collect
.foreach(println)
rdd.distinct().foreach(println)
如何编译执行?
在spark shell中是测试
真正写代码是需要编译的,需要sbt这个工具
配置文件
test.sbt
name:=
WordCount.scala
import org.apache.spark
cd到代码的路径下
用
实验四:流计算
sparkstreaming
import org.apache.spark.streaming._
val ssc=new StreamingContext(sc,Seconds(10))
val lines=ssc.textFileStream(“file:///D://BigDataTools”)
val words=lines.flatMap(.split(" "))
val wordCount=words.map(x=>(x,1)).reduceByKey(+_)
wordCount.print()
ssc.start()
ssc.awaitTermination()
到目录中修改新增文件,就会把这些变化给找出来
真实案例
jupyter在网页上写代码并执行
customer表
category表
product表
order表
order_items表
scala写的