首先准备代码
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 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条)