zoukankan      html  css  js  c++  java
  • 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

     

     

     

     

  • 相关阅读:
    flutter PageView实现左右滑动切换视图
    Flutter进阶:在应用中实现 Hero(飞行) 动画
    阿里云申请免费SSL证书,并配置到Tomcat,实现https访问
    Tomcat 部署项目的三种方法
    idea jsp文件中body标签内引入编辑器后提示statement expected
    UEditor设置内容setContent()失效的解决方法
    UEditor API
    easyui-dialog打开之后append("标签")标签存在但是显示不出来
    combogrid下拉方法封装
    java中try 与catch的使用
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/12213047.html
Copyright © 2011-2022 走看看