Spark Sql
spark-sql 写代码方式
1、idea里面将代码编写好打包上传到集群中运行,上线使用
--conf spark.sql.shuffle.partitions=1 -- 设置spark sqlshuffle之后分区数据马,和代码里面设置是一样的,代码中优先级高
spark-submit提交
spark-submit --master yarn-client --class com.sql.Demo9Submit --conf spark.sql.shuffle.partitions=1 spark-1.0-SNAPSHOT.jar
代码如下
package com.sql
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object Demo9Submit {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
//提交到集群运行需要注释
// .master("local")
.appName("submit")
.getOrCreate()
import spark.implicits._
import org.apache.spark.sql.functions._
//读取hdfs中的数据
val studentDF: DataFrame = spark
.read
.format("csv")
.option("sep", ",")
.schema("id STRING,name STRING,age INT,gender STRING,clazz STRING")
.load("/spark/data/students")
val genderNumDF: DataFrame = studentDF
.groupBy($"gender")
.agg(count($"gender") as "c")
//保存数据到hdfs
genderNumDF
.write
.format("csv")
.option("sep", ",")
.mode(SaveMode.Overwrite)
.save("/spark/target/gender_num")
}
}
运行结果如下
2、spark shell (repl) 里面使用sqlContext 测试使用,简单任务使用(边写代码边输出)这种属于硬写不方便
spark-shell --master yarn-client
不能使用yarn-cluster Driver必须再本地启动
3、spark-sql spark-sql --master yarn-client 不能使用yarn-cluster 和hive的命令行一样,直接写sql
开始时会打印一堆日志,如下:
我们可以在 关闭日志如下:
先改模板
修改日志级别
再次进入
在spark-sql时完全兼容hive sql的
spark-sql底层使用的时spark进行计算的
hive 底层使用的是MR进行计算的