Spark-SQL的具体编程场景

  

入门案例:

  
 <代码>对象SparkSqlTest {
  def主要(args:数组[String]):单位={//屏蔽多余的日志
  Logger.getLogger (org.apache.hadoop) .setLevel (Level.WARN)
  Logger.getLogger (org.apache.spark) .setLevel (Level.WARN)
  Logger.getLogger (org.project-spark) .setLevel (Level.WARN)//构建编程入口
  配置:val SparkConf=new SparkConf ()
  conf.setAppName (“SparkSqlTest”)
  .setMaster(“地方[2]”)
  val火花:SparkSession=SparkSession.builder () . config(配置)
  .getOrCreate ()/* *
  *注意在2.0之火花后:
  * val sqlContext=new sqlContext (sparkContext)
  * val hiveContext=new hiveContext (sparkContext)
  *主构造器被私有化,所以这里只能使用SparkSession对象创建
  *///创建sqlcontext对象
  val sqlContext: sqlContext=spark.sqlContext//加载数据为DataFrame,这里加载的是json数据//数据格式:{名称:“年龄:18}
  val perDF: DataFrame=sqlContext.read.json (“hdfs://zzy/数据/person.json”)//查看二维表结构
  perDF.printSchema ()//查看数据,默认显示20条记录
  perDF.show ()//复杂查询
  perDF.select(“名字”),告诉()//指定字段进行查询
  perDF。选择(新列(“名字”),新列(“年龄”).>(18),告诉()//指定查询条件进行查询
  perDF.select(“名字”,“年龄”)。(新列(“时代”).>(18),告诉()//指定查询条件进行查询吗
  perDF.select(“时代”).groupBy .avg(“年龄”)(“年龄”)//聚合操作
  }
  } 
  

如果对入门案例不太了解的话,接下来分步骤的介绍:

  

(1)抽样/数据//DataFrame/列表之间的转化

  

   通过抽样转换为DataFrame/数据集,有两种方式:
     -通过反射的方式将抽样或者外部的集合转化为dataframe/数据集
     -要通过编程动态的来将外部的集合或者抽样转化为dataframe或者数据集
   <强>注意强:如果是dataFrame对应的是java bean,如果是数据集对应的是案例类

  
通过反射的方式将抽样或者外部的集合转化为dataframe/数据集
  

<强>数据准备:

  
 <代码>案例类学生(名称:字符串,生日:字符串,省:字符串)
  val stuList=列表(
  新学生(“委xx”、“1998-11-11”、“山西”),
  新学生(“吴xx”、“1999-06-08”、“河南”),
  新学生(“戚xx”、“2000-03-08”、“山东”),
  新学生(“王xx”、“1997-07-09”、“安徽”),
  新学生(“薛xx”、“2002-08-09”、“辽宁”)
  ) 
  

<强>列表——比;DataFrame :

  
 <代码>//屏蔽多余的日志
  Logger.getLogger (org.apache.hadoop) .setLevel (Level.WARN)
  Logger.getLogger (org.apache.spark) .setLevel (Level.WARN)
  Logger.getLogger (org.project-spark) .setLevel (Level.WARN)//构建编程入口
  配置:val SparkConf=new SparkConf ()
  conf.setAppName (“SparkSqlTest”)
  .setMaster(“地方[2]”)
  这里(“spark.serializer”、“org.apache.spark.serializer.KryoSerializer”)
  名为(学生)classOf .registerKryoClasses(数组())
  val火花:SparkSession=SparkSession.builder () . config(配置)
  .getOrCreate ()//创建sqlcontext对象
  val sqlContext: sqlContext=spark.sqlContext/* *
  *列表——→DataFrame
  *将scala集合转换为java集合
  */val javaList:实效。(学生)=JavaConversions.seqAsJavaList列表(stuList)
  val stuDF: DataFrame=sqlContext.createDataFrame(名为(学生)classOf javaList,)
  val数=stuDF.count ()
  println(计数) 
  

<强>抽样——比;DataFrame :

  
 <代码>//屏蔽多余的日志
  Logger.getLogger (org.apache.hadoop) .setLevel (Level.WARN)
  Logger.getLogger (org.apache.spark) .setLevel (Level.WARN)
  Logger.getLogger (org.project-spark) .setLevel (Level.WARN)//构建编程入口
  配置:val SparkConf=new SparkConf ()
  conf.setAppName (“SparkSqlTest”)
  .setMaster(“地方[2]”)
  这里(“spark.serializer”、“org.apache.spark.serializer.KryoSerializer”)
  名为(学生)classOf .registerKryoClasses(数组())
  val火花:SparkSession=SparkSession.builder () . config(配置)
  .getOrCreate ()//创建sqlcontext对象
  val sqlContext: sqlContext=spark.sqlContext//创建sparkContext
  val sc: SparkContext=spark.sparkContext/* *
  *抽样——→DataFrame
  */val stuRDD:抽样(学生)=sc.makeRDD (stuList)
  val stuDF: DataFrame=sqlContext.createDataFrame(名为(学生)classOf stuRDD,)
  val数=stuDF.count ()
  println(计数) 
  

<强>列表——比;数据集

Spark-SQL的具体编程场景