val online_profile_score_df: DataFrame = profile_df.join(score_df, usingColumns =Seq("serv_number","statis_month")).persist()//线上发展用户+app信息
加入select算子后返回DataFrame
val a: DataFrame = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number")
filter算子后返回Dataset[Row]
val a: Dataset[Row]= online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'")
所以采用toDF()函数来:Dataset[Row]->DataFrame
val a: DataFrame = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'").toDF()
存成hive表后,返回Unit
存
成
h
i
v
e
表
为
D
a
t
a
F
r
a
m
e
的
子
方
法
,
故
统
计
结
果
最
后
务
必
转
成
D
a
t
a
F
r
a
m
e
\color{red}{存成hive表为DataFrame的子方法,故统计结果最后务必转成DataFrame}
存成hive表为DataFrame的子方法,故统计结果最后务必转成DataFrame
val a: Unit = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'").toDF().write.mode(SaveMode.Overwrite).saveAsTable(tableName = s"online_non_2i2c_app_${this_month}_m")
groupBy算子后返回RelationalGroupedDataset
val a: RelationalGroupedDataset = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'").groupBy("cur_product","prod_id","prod_name","statis_month","serv_number")
注
意
:
\color{red}{注意:}
注意:
采
用
g
r
o
u
p
B
y
算
子
后
,
后
面
需
要
加
入
聚
合
函
数
。
才
能
转
换
为
D
a
t
a
F
r
a
m
e
。
\color{red}{采用groupBy算子后,后面需要加入聚合函数。才能转换为DataFrame。}
采用groupBy算子后,后面需要加入聚合函数。才能转换为DataFrame。
使用agg聚合函数后,正常返回DataFrame
val a: DataFrame = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'").groupBy("cur_product","prod_id","prod_name","statis_month").agg(count("serv_number").alias("p_sum"))
各种聚合算子spark sql完成降序排序,输出排名.
正常返回DataFrame,可存成hive表
val a: Unit = online_profile_score_df.select("cur_product","prod_id","prod_name","statis_month","serv_number").filter(s"product_type <> '1'").groupBy("cur_product","prod_id","prod_name","statis_month").agg(count("serv_number").alias("p_sum")).sort($"p_sum".desc).withColumn("a_rank", monotonically_increasing_id+1).limit(10).write.mode(SaveMode.Overwrite).saveAsTable(tableName = s"online_non_2i2c_app_${this_month}_m")