scala踩坑日记

统计踩坑日记:

1.同一个包,同一个类下面的方法可以直接调用,实例:
def stat (statDate : String):DataSet[Row] ={
	val df = newstat(statDate)
	df
}

def newstat(stat:String):DataSet[Row] ={
	df
}
2.scala可以向python一样优美,不需要各种调用,各种嵌套
实例:
val df1 = session.sql(s"......")
df1.createTempView("df1")
val df2 = session.sql(s"select ...... from df1")
df2.createTempView("df2")
val df2 = session.sql(s"select ...... from df2")
以此类推。。。。
3.scala使用SQL传值很简单,但有一点小弯弯绕绕
例如:
val df1 = session.sql("select * from tempView where dt = $'dt'")
很遗憾,scala并不支持这样传值哦
正确做法是:
import session.implicits._
val df1 = session.sql(s"select * from tempView where dt = '${dt}'")
隐式转换和's' 和'{}'是必须的。
4.聚合函数禁止“套娃”
val df = df1.agg.sum(expr(sum()))
画个大叉,但支持
val df2 = df1.agg(sum(expr("")) as ...)
val df3 = df2.agg(sum(expr("")) as ...)
5.习惯性persist是一个好习惯,好处自己百度去,我只负责告诉你这很香
6.方法一调用方法二,这俩方法别写太远,否则全文找还找不到就很难受
7.多尝试使用withColumn方法,不用多次建立dataframe
实例:
val df = df1.withColumn("重命名",lit(原字段.function))
8.sparkSQL使用聚合函数和groupBy有点神奇的地方,有个first别忘了加
实例:
val df1 = sql("select distinct first(orgno),first(tgno),first(tgid),first(dt),sum(case when error > 0 then 1 else 0 end) as error_cnt from temp group by tgno,dt")

不写会报这样的错
org.apache.spark.sql.AnalysisException: expression 'temp.`orgno`' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;;
9.有时候找不到哪里错了,不如想想有没有可能是哪里少了个隐形的return
10.细心,做大数据的一跑程序几小时,没那么多次机会给你重来
11.如果有改代码的需求,不用强求和原作者的风格一致,你可以按照自己的风格来,记得写好注释,防止后面人看不懂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值