
首先准备代码
import org.apache.spark.sql.{Dataframe, SaveMode, SparkSession}
object demo4onHive {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("demo4OnHive")
.config("spark.sql.shuffle.partitions", 1)
.enableHiveSupport() //在代码中开启hive元数据支持,后面写代码可以直接使用hive中的表
.getOrCreate()
import spark.implicits._
import org.apache.spark.sql.functions._
//通过表名获得一个Dataframe
val students: Dataframe = spark.table("students")
//DSL
val df: Dataframe = students
.groupBy($"clazz")
.agg(count($"id"))
//不写DSL的话可以直接编写sql使用hive中的表
// val clazzNum: Dataframe = spark.sql(
// """
// |select clazz,count(1) from students group by clazz
// |""".stripMargin)
df.write
.format("csv")
.option("sep",",")
.mode(SaveMode.Overwrite)
.save("/data/on_hive")
}
}
这里是统计每个班级的人数
打包前需要在pom.xml文件里面添加plugin,目的是将依赖打入Jar包
org.apache.maven.plugins maven-compiler-plugin3.1 1.8 1.8 maven-assembly-plugin jar-with-dependencies make-assembly package single org.scala-tools maven-scala-plugin2.15.2 compile testCompile
然后使用maven的打包功能
选择对应的module项目
打包完成后,将带有依赖的jar包上传到集群中,然后执行命令
spark-submit --master yarn-client --class demo4onHive Spark-1.0-SNAPSHOT-jar-with-dependencies.jar
spark-submit 是spark的提交命令
–master 指定以yarn-client模式运行
–class 后面的 demo4OnHive是代码文件的路径,根据下图复制可得
最后面则是上传的jar包名称
执行命令后,如果报ClassNotFoundException,说明没有找到demo4OnHive,这是因为打包的时候是根据target文件夹打包,如果只是编写了代码,但是没有编译,那么最后打包的jar包里面就没有这个代码文件
因此可以将重新编译项目,也可以直接将target文件删掉,build需要打包的地方
然后再重新上传新的jar包并执行
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)