Spark 系列

首先推荐阅读大佬Spark系列博客:不温卜火

学习笔记

1. 下载安装:
	*** 使用文档:http://spark.apachecn.org/#/docs/1
	*** 官网可能因美国禁令目前无法下载,前往:https://archive.apache.org/dist/spark/spark-2.4.4/
	*** 教程参考:https://blog.csdn.net/qq_39290225/article/details/99332056
	1.1 JAVA环境
	1.2 下载scala:https://www.scala-lang.org/
	1.3 下载spark:https://archive.apache.org/dist/spark/spark-2.4.4/  (较新版本可能未完美结合,目前暂时使用 scala-2.13.3 + spark2.4.4)
	1.4 配置SPARK_HOME
	
2. 语法Demo
	*** Spark中实现分组取TOP N (Scala版本):https://blog.csdn.net/accptanggang/article/details/52926138
	*** spark解析csv文件_Spark:解析CSV文件并按列值分组:https://blog.csdn.net/danpie3295/article/details/107278853
	*** 根据日期过滤:https://www.it-swarm.dev/zh/apache-spark/%E6%A0%B9%E6%8D%AE%E6%97%A5%E6%9C%9F%E8%BF%87%E6%BB%A4%E7%81%AB%E8%8A%B1%E6%95%B0%E6%8D%AE%E5%B8%A7/1054144121/
	
3. SPARK-SQL内置函数之时间日期类:https://blog.csdn.net/u014589856/article/details/80347917
   spark sql的日期转换格式:https://www.cnblogs.com/kaiwen03/p/9644600.html		
   
4. SQL分组取每组前一(或几)条记录(排名):https://www.cnblogs.com/netserver/p/4518995.html   
	SQL中GROUP BY的用法:https://blog.csdn.net/liitdar/article/details/85272035
	group by详解 :https://blog.csdn.net/jerrytomcat/article/details/82351605?depth_1- 	
	sql中 between 的边界问题:https://blog.csdn.net/jiangyu1013/article/details/80729362	
	
	【句式】
	*** select a.* from (select * from TABLE order by create_time desc) a group by a.user_id
	*** SELECT count(*) FROM TABLE t WHERE t.created_time = (select max(created_time) created_time from cust_info where code = t.code)
	
	【总结】
	*** 当SELECT原有字段属性时,没有使用聚合函数的部分,GROUP BY的结果是分组内容中的第一组查询结果(注意此操作会忽略掉差异,所以在select的参数有共性或者可以忽略的情况下才用)
	*** 对于过滤条件,可以先用where,再用group  by或者是先用group  by,再用having
	*** 使用where条件则不能使用聚组函数(count() , sum() , avg() , max() , min()等)
	*** 多个字段进行分组时,需要将name和grade看成一个整体,只要是name和grade相同的可以分成一组;如果只是name相同,grade不同就不是一组。
	
	【对比】
	*** where 子句的作用:在对查询结果进行分组前,把不符合where条件的行去掉,即在分组之前过滤数据。但不能使用聚组函数(count() , sum() , avg() , max() , min()等)
	*** having 子句的作用:筛选满足条件的组,即在分组后过滤数据,条件中经常包含聚组函数,使用 having 条件过滤出特定的组。
		例:select camp,MIN(register_time) as register_time from roles group by camp HAVING register_time > '2018-12-01 00:00:00';
		
5. 	科学计数法还原
	*** 参考:读取csv到dataset中.变成科学计数法:https://bbs.csdn.net/topics/390360455
	*** Convert.ToDecimal(row["Usage"])).ToString()		
	
6. javaRdd序列化相关
	*** 使用spark javaRdd出现序列化问题总结:https://blog.csdn.net/hfutlxm/article/details/78621406   
	*** 报错“Caused by: org.apache.spark.SparkException: Task not serializable”  (参考:https://www.cnblogs.com/zhou-jun/p/10195748.html)	
	
7. 	使用SPARK进行统计时,以下两种方式消耗差别不大
	*** 方式一
        String sql = "SELECT count(*) FROM table_info";
        Dataset<Row> dataSet = querySparkTable(sql);
        Long count =  dataSet.collectAsList().get(0).getLong(0);

	*** 方式二
        String sql = "SELECT * FROM table_info";
        Dataset<Row> dataSet = querySparkTable(sql);
        Long count =  dataSet.count();	
		
8. 如何在Spark Java中创建复杂的StructType模式:https://stackoom.com/question/3y1Y4/%E5%A6%82%E4%BD%95%E5%9C%A8Spark-Java%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%A4%8D%E6%9D%82%E7%9A%84StructType%E6%A8%A1%E5%BC%8F

9. Spark csv文件转换Parquet Scala:https://my.oschina.net/harveyzhang/blog/1799119	

10. SparkSQL 优雅地读取CSV文件[示例]:https://blog.csdn.net/weixin_42072754/article/details/105626392?spm=1001.2101.3001.4242	

猜你喜欢

转载自blog.csdn.net/qq_28202661/article/details/108586579