sparkSessiontest

记事本内容:

 打印结构:

方法1:
object SparkSessionTest {

  case class Person(name:String,age:Int)

  def main(args: Array[String]): Unit = {

    val sparkSession=SparkSession.builder().appName("SparkSessionTest")
      .master("local[*]")
      .getOrCreate()
    val sparkContext=sparkSession.sparkContext
    val rdd=sparkContext.textFile("D:\\temp\\person.txt")
    val rowRdd=rdd.map(_.split(" ")).map(row=>Person(row(0),row(1).toInt))

    import sparkSession.implicits._
    rowRdd.toDF
    
    sparkSession.stop()
  }

}
方法2:
val sparkContext=sparkSession.sparkContext
val rdd=sparkContext.textFile("D:\\temp\\person.txt")
val schemaFiled="name,age"
val schemaString=schemaFiled.split(",")
val schema =StructType(
  List(
    StructField(schemaString(0),StringType,nullable = true),
    StructField(schemaString(1),IntegerType,nullable = true)
  )
)
val rowRdd= rdd.map(_.split("")).map(p=>Row(p(0),p(1).toInt))
val df=sparkSession.createDataFrame(rowRdd,schema)
df.show()

  结果展示:

 

parquet的优势

支持列存储+嵌套数据格式+适配多个计算框架

节省表扫描时间和反序列的时间

压缩技术稳定出色,节省存储空间

Spark操作 Parquet文件比操作CSV等普通文件的速度更快

加载数据:sparkSession.read.parquet(“/nginx/20200110.parquet”)

写入数据:df.write.mode(SaveMode.Overwrite).parquet(“/path/to”)

分区文件

加载批量数据:

 

Df.show()//只显示前20条数据
Df.show(3)//只显示前3条数据
df.show( false)//每列可以显示多于20个字符
dt show(3, false)

 

Df.select (“字段1”,”字段2”).show()
Df.select(col(“”) as(“别名1”),col(“字段2”)+1).show()

  

df.first()//获取第一行数据,返回RoW
df.head( 3)//获取前3行数据,返回 Array Row]
df.take (3)//获取前3行数据,返回 Array[Row]
df.takeaslist(3//获取前3行数据,返回List[Row]
df.limit(3).show()//返回新的 Data Frame,不是 Action操作

  

Df.where(“age>21”).show()
Df.filter(“age>21”).show()
Df.where(col(“age”)>21).show()
Ds.where($”age”>21).show()

  

Df.where(“age=21”).show
Df.where(col(“age”)===21).show
Df.where(col(“age”)=!=21).show

  

Val  ageFilter_1 =col(“age”)>21
Val  agefilter_2=col(“age”)<25
Val  ageFilter_3=agefilter_1.or(ageFilter_2)
Df.where(col(“name”)===”jack”).where(ageFilter_3)

  

Val ageFilter_1 =col(“age”)>21
Val ageFilter_2=col(“age”)<25
Val ageFilter_3 =ageFilter_1.ll(ageFilter_2)
Df.where(col(“name”)===”jack”)
.where(ageFitler_3)
.show
//按照身份统计人数
Df.groupBy(col(“province”)) .count .show

按照城市,手机运营商分组统计人数并按人数排序

//方法1
Df.groupby(col(“city”),col(“”op_phone“”)) .count .withColumnRenamed(“count”,”num”) .orderBy(col(“num”).desc) .show
//方法2
Ds.groupBy($”city”,$”op_phone”)
.count
.withColumnRenamed(“count”,”num”)
.sort($”num”.desc)
.show

  按年统计注册用户最高的积分,以及平均积分

Df.groupBy(year(col(“add_time”)))
.agg(max(col(“total_mark”).as(“max_mark”)),
Avg(col(“total_mark”).as(“avg_mark”))
)
.show

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-01-19 11:35  ~清风煮酒~  阅读(263)  评论(0编辑  收藏  举报