上一节 广告精准投放的代码封装优化及parquet文件分区操作案例
补充一点
若不想分区,指定设置这个参数即可:
// partitionBy 对数据按照省份进行分区
dataFrame.write.parquet(parquetOutPath)
parquet压缩格式设置
// spark序列化优化参数
val sparkParams = Map[String, String](
"spark.serializer" -> classOf[KryoSerializer].getName,
"spark.sql.parquet.compression.codec" -> "snappy" // 设置parquet文件的压缩格式
)
启动程序后运行,在自己的磁盘文件里可以查看
说明:分区会产生大量shuffle
parquet文件读取测试
dolphin-doit01\src\main\scala\cn\sheep\dolphin\etl\Sql4Parquet.scala
package cn.sheep.dolphin.etl
import cn.sheep.dolphin.common.DolphinAppComm
import org.apache.spark.sql.SQLContext
/**
* author: old sheep
* Created 2021/04/03
*/
object Sql4Parquet {
def main(args: Array[String]): Unit = {
val sc = DolphinAppComm.createSparkContext("测试parquet读取")
val sqlc = new SQLContext(sc)
val dataFrame = sqlc.read.parquet("C:\\Users\\mrman\\dolphin-doit01\\parquet")
dataFrame.show(100)
sc.stop()
}
}
启动Sql4Parquet 程序后运行
各省市数据分布统计-SQL
dolphin-doit01\src\main\scala\cn\sheep\dolphin\report\ProvinceCityAnalysis.scala
package cn.sheep.dolphin.report
import cn.sheep.dolphin.common.DolphinAppComm
import org.apache.spark.sql.SQLContext
/**
* 省市数据分析
* author: old sheep
* Created 2021/04/03 15:06
*/
object ProvinceCityAnalysis {
def main(args: Array[String]): Unit = {
if(args.size != 2) {
println(
"""
|Usage: cn.sheep.dolphin.report.ProvinceCityAnalysis
|参数:<parquetPath> <outputPath>
""".stripMargin)
}
val Array(parquetPath, outputPath) = args
val sc = DolphinAppComm.createSparkContext("省市数据分析SQL")
val sqlc = new SQLContext(sc)
// 读取parquet文件
val dataFrame = sqlc.read.parquet(parquetPath)
// 将dataFrame注册成表
dataFrame.registerTempTable("t_adlog")
// 针对数据表进行sql查询: 每个省市的数据记录条数
val result =sqlc.sql(
"""
|select substring(requestdate, 0, 10) date, provincename, cityname, count(1) cnt
|from t_adlog
|group by provincename,cityname, substring(requestdate, 0, 10)
""".stripMargin)
// JSON
result.coalesce(4).write.json(outputPath)
sc.stop()
}
}
配置参数据
在磁盘查看文件
查看json数据
往mysql插入数据库
// MYSQL
result.write.mode(SaveMode.Append).jdbc(DolphinConfig._url, "r_procity_analysis", DolphinConfig.props)
运行程序ProvinceCityAnalysis程序,在mysql可以查看数据库
提交job到yarn运行
打包后的jar文件上传到虚拟机运行,执行命令
[root@Master ~]# spark-submit \
> --class cn.sheep.dolphin.etl.Bz2ParquetV2 \
> --master yarn \
> --deploy-mode cluster \
> --executor-memory 1G \
> --num-executors 3 \
/root/dolphin-doit01-0.0.1-SNAPSHOT.jar /adlogs /adlogs/parquet