入门案例:
<代码>对象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(计数)代码>
<强>列表——比;数据集