Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
Amazon-Selection-Data
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abel_cjy
Amazon-Selection-Data
Commits
7ef1fd6b
Commit
7ef1fd6b
authored
Jul 10, 2026
by
hejiangming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
统一口径从dim_st_detail 拿数据 对于爬虫抓搜索词时 该搜索词没结果的情况用dim的数据对排名相关字段兜底 保证峰值月 常年可卖 趋势图这些字段的数据正常计算
parent
77d145f8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
241 additions
and
37 deletions
+241
-37
dwt_aba_last365.py
Pyspark_job/dwt/dwt_aba_last365.py
+107
-15
dwt_aba_last_change_rate.py
Pyspark_job/dwt/dwt_aba_last_change_rate.py
+75
-5
dwt_aba_st_analytics.py
Pyspark_job/dwt/dwt_aba_st_analytics.py
+18
-2
dwt_st_base_report.py
Pyspark_job/dwt/dwt_st_base_report.py
+41
-15
No files found.
Pyspark_job/dwt/dwt_aba_last365.py
View file @
7ef1fd6b
This diff is collapsed.
Click to expand it.
Pyspark_job/dwt/dwt_aba_last_change_rate.py
View file @
7ef1fd6b
...
@@ -48,6 +48,9 @@ class DwtAbaLastChangeRate(object):
...
@@ -48,6 +48,9 @@ class DwtAbaLastChangeRate(object):
self
.
df_save
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
self
.
df_save
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
# 需求1:近6月排名变化率/变化量(仅 month 类型生效)
# 需求1:近6月排名变化率/变化量(仅 month 类型生效)
self
.
df_hist_rank
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
# M-1~M-6 历史 rank
self
.
df_hist_rank
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
# M-1~M-6 历史 rank
# 爬虫漏抓补 rank:dim_st_detail 上月/去年同月 rank,给环比/同比 last_rank/last_year_rank 兜底(仅 month)
self
.
df_last_month_rank_dim
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
# 上月 rank(dim)
self
.
df_last_year_rank_dim
=
self
.
spark
.
sql
(
f
"select 1+1;"
)
# 去年同月 rank(dim)
def
handle_date_offset
(
self
,
handle_type
:
int
):
def
handle_date_offset
(
self
,
handle_type
:
int
):
# handle_type = 0 代表计算环比日期,等于 1 代表计算同比日期
# handle_type = 0 代表计算环比日期,等于 1 代表计算同比日期
...
@@ -168,28 +171,79 @@ class DwtAbaLastChangeRate(object):
...
@@ -168,28 +171,79 @@ class DwtAbaLastChangeRate(object):
month_list
=
[
CommonUtil
.
get_month_offset
(
self
.
date_info
,
-
i
)
for
i
in
range
(
1
,
7
)]
month_list
=
[
CommonUtil
.
get_month_offset
(
self
.
date_info
,
-
i
)
for
i
in
range
(
1
,
7
)]
print
(
f
"近6月历史月份列表: {month_list}"
)
print
(
f
"近6月历史月份列表: {month_list}"
)
# 一次读 dwt_aba_st_analytics 的 M-1~M-6 历史分区,仅取 search_term + rank
# 一次读 M-1~M-6 历史分区的 rank,用于算 6 个变化量字段 + rank_rate_last_1_month
# 用于算 6 个变化量字段 + rank_rate_last_1_month
# ===== 原逻辑(保留备查):读 dwt_aba_st_analytics 近6月 rank =====
# 问题:dwt = 爬虫∩ABA,某月漏抓 → 该月 rank 缺 → 近6月变化被误判成假下榜(+1e7)/假新进榜(-1e7)。
# sql_hist_rank = f"""
# select
# search_term,
# cast(rank as int) as rank,
# date_info
# from dwt_aba_st_analytics
# where site_name = '{self.site_name}'
# and date_type = '{self.date_type}'
# and date_info in ({CommonUtil.list_to_insql(month_list)})
# and rank > 0
# """
# 【改-一档】换源 dim_st_detail(ABA 清洗表,漏抓月仍有该词 st_rank),近6月排名变化不再出假尖刺
sql_hist_rank
=
f
"""
sql_hist_rank
=
f
"""
select
select
search_term,
search_term,
cast(rank as int) as rank,
cast(
st_
rank as int) as rank,
date_info
date_info
from d
wt_aba_st_analytics
from d
im_st_detail
where site_name = '{self.site_name}'
where site_name = '{self.site_name}'
and date_type = '{self.date_type}'
and date_type = '{self.date_type}'
and date_info in ({CommonUtil.list_to_insql(month_list)})
and date_info in ({CommonUtil.list_to_insql(month_list)})
and rank > 0
and
st_
rank > 0
"""
"""
self
.
df_hist_rank
=
self
.
spark
.
sql
(
sql_hist_rank
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
self
.
df_hist_rank
=
self
.
spark
.
sql
(
sql_hist_rank
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
print
(
"self.df_hist_rank:"
)
print
(
"self.df_hist_rank:"
)
self
.
df_hist_rank
.
show
(
10
,
truncate
=
True
)
self
.
df_hist_rank
.
show
(
10
,
truncate
=
True
)
# 【二档】环比/同比 rank 补漏抓月:读 dim_st_detail 上月、去年同月的 st_rank,
# 在 handle_base / handle_year_ratio 里给 last_rank / last_year_rank 做 coalesce 兜底——
# 对比月被爬虫漏抓(dwt 无该词)时用 dim 真 rank,避免被算成假上升;
# 两端都无(真·新进榜/续断)时仍为 null → 沿用原 na.fill(-1000) 语义。
sql_last_month_rank
=
f
"""
select search_term, cast(st_rank as int) as last_rank_dim
from dim_st_detail
where site_name = '{self.site_name}'
and date_type = '{self.date_type}'
and date_info = '{self.last_date_info}'
and st_rank > 0
"""
self
.
df_last_month_rank_dim
=
self
.
spark
.
sql
(
sql_last_month_rank
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
# 顺带多取 st_search_num,给同比搜索量变化率 last_year_search_volume 也做漏抓兜底(见 handle_year_ratio)
sql_last_year_rank
=
f
"""
select search_term,
cast(st_rank as int) as last_year_rank_dim,
st_search_num as last_year_search_volume_dim
from dim_st_detail
where site_name = '{self.site_name}'
and date_type = '{self.date_type}'
and date_info = '{self.last_year_date_info}'
and st_rank > 0
"""
self
.
df_last_year_rank_dim
=
self
.
spark
.
sql
(
sql_last_year_rank
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
def
handle_base
(
self
):
def
handle_base
(
self
):
self
.
df_st_base_data
=
self
.
df_aba_analytics
.
join
(
self
.
df_st_base_data
=
self
.
df_aba_analytics
.
join
(
self
.
df_aba_analytics_old
,
on
=
'id'
,
how
=
'left'
self
.
df_aba_analytics_old
,
on
=
'id'
,
how
=
'left'
)
)
# 【二档-环比】last_rank 补漏抓月(仅 month):上月被爬虫漏抓时 dwt 的 last_rank 为 null,
# 用 dim 上月 st_rank(df_last_month_rank_dim,按 search_term)coalesce 兜底 → "漏抓续榜"不再算成假上升;
# 两端都无(真新进榜)时 last_rank 仍 null → 后续 na.fill(-1000) 语义不变。
# (df_st_base_data 已带 search_term,来自当月 df_aba_analytics;按 search_term left join,1:1 不放大)
if
self
.
date_type
==
DateTypes
.
month
.
name
:
self
.
df_st_base_data
=
self
.
df_st_base_data
.
join
(
self
.
df_last_month_rank_dim
,
on
=
'search_term'
,
how
=
'left'
)
.
withColumn
(
'last_rank'
,
F
.
coalesce
(
F
.
col
(
'last_rank'
),
F
.
col
(
'last_rank_dim'
))
)
.
drop
(
'last_rank_dim'
)
self
.
df_last_month_rank_dim
.
unpersist
()
self
.
df_st_base_data
=
self
.
df_st_base_data
.
withColumn
(
self
.
df_st_base_data
=
self
.
df_st_base_data
.
withColumn
(
'rank_rate_of_change'
,
'rank_rate_of_change'
,
F
.
round
((
F
.
col
(
'rank'
)
-
F
.
col
(
'last_rank'
))
/
F
.
col
(
'last_rank'
),
4
)
F
.
round
((
F
.
col
(
'rank'
)
-
F
.
col
(
'last_rank'
))
/
F
.
col
(
'last_rank'
),
4
)
...
@@ -218,6 +272,22 @@ class DwtAbaLastChangeRate(object):
...
@@ -218,6 +272,22 @@ class DwtAbaLastChangeRate(object):
df_year_ratio
=
self
.
df_st_base_data
.
join
(
df_year_ratio
=
self
.
df_st_base_data
.
join
(
self
.
df_st_last_year_data
,
on
=
'search_term'
,
how
=
'left'
self
.
df_st_last_year_data
,
on
=
'search_term'
,
how
=
'left'
)
)
# 【二档-同比】last_year_rank 补漏抓月(仅 month):去年同月被漏抓时 dwt 无该词 → last_year_rank null,
# 用 dim 去年同月 st_rank(df_last_year_rank_dim,按 search_term)coalesce 兜底 → 同比 rank 不再假上升;
# 真·去年没有(dim 也无)时仍 null → 沿用原 na.fill(-1000) 语义。
if
self
.
date_type
==
DateTypes
.
month
.
name
:
df_year_ratio
=
df_year_ratio
.
join
(
self
.
df_last_year_rank_dim
,
on
=
'search_term'
,
how
=
'left'
)
.
withColumn
(
'last_year_rank'
,
F
.
coalesce
(
F
.
col
(
'last_year_rank'
),
F
.
col
(
'last_year_rank_dim'
))
)
.
withColumn
(
# 同比搜索量变化率同样补漏抓月:去年同月漏抓时 dwt 的 last_year_search_volume 为 null,
# 用 dim 的 st_search_num(last_year_search_volume_dim)coalesce 兜底,避免 search_volume_change_rate 假上升(na.fill 1000);
# 真·去年没有(dim 也无)时仍 null → 沿用原 na.fill 语义。
'last_year_search_volume'
,
F
.
coalesce
(
F
.
col
(
'last_year_search_volume'
),
F
.
col
(
'last_year_search_volume_dim'
))
)
.
drop
(
'last_year_rank_dim'
,
'last_year_search_volume_dim'
)
self
.
df_last_year_rank_dim
.
unpersist
()
df_year_ratio
=
df_year_ratio
.
withColumn
(
df_year_ratio
=
df_year_ratio
.
withColumn
(
"rank_change_rate"
,
"rank_change_rate"
,
F
.
round
(
F
.
expr
(
"(rank - last_year_rank) / last_year_rank"
),
4
)
F
.
round
(
F
.
expr
(
"(rank - last_year_rank) / last_year_rank"
),
4
)
...
...
Pyspark_job/dwt/dwt_aba_st_analytics.py
View file @
7ef1fd6b
...
@@ -535,12 +535,28 @@ class DwtAbaStAnalytics(Templates):
...
@@ -535,12 +535,28 @@ class DwtAbaStAnalytics(Templates):
# 读自身历史 11 个月分区的 rank,用于计算峰值月 peak_month / 常年可卖 all_year_text_flag
# 读自身历史 11 个月分区的 rank,用于计算峰值月 peak_month / 常年可卖 all_year_text_flag
# ============================================================
# ============================================================
last_11_month
=
[
CommonUtil
.
get_month_offset
(
self
.
date_info
,
-
i
)
for
i
in
range
(
1
,
12
)]
last_11_month
=
[
CommonUtil
.
get_month_offset
(
self
.
date_info
,
-
i
)
for
i
in
range
(
1
,
12
)]
# ===== 原逻辑(保留备查):读 dwt_aba_st_analytics 近11月 rank =====
# 问题:dwt_aba_st_analytics = 爬虫 ∩ ABA(inner join),某月爬虫漏抓 → 该词该月无行 →
# peak_month/常年可卖(all_year_text_flag)被漏抓月带偏(峰值月算错、常年可卖误判为否)。
# sql = f"""
# select
# search_term,
# rank,
# date_info
# from dwt_aba_st_analytics
# where site_name = '{self.site_name}'
# and date_type = 'month'
# and date_info in ({CommonUtil.list_to_insql(last_11_month)})
# """
# 【改】换源 dim_st_detail(ABA 清洗表,dwt 的 rank 本就取自它的 st_rank):
# dim_st_detail 不经爬虫过滤,漏抓月 ABA 侧仍有该词行 →
# 峰值月/常年可卖按 ABA 的 presence + 真实 rank 计算,不再受爬虫漏抓影响。
sql
=
f
"""
sql
=
f
"""
select
select
search_term,
search_term,
rank,
st_rank as
rank,
date_info
date_info
from d
wt_aba_st_analytics
from d
im_st_detail
where site_name = '{self.site_name}'
where site_name = '{self.site_name}'
and date_type = 'month'
and date_type = 'month'
and date_info in ({CommonUtil.list_to_insql(last_11_month)})
and date_info in ({CommonUtil.list_to_insql(last_11_month)})
...
...
Pyspark_job/dwt/dwt_st_base_report.py
View file @
7ef1fd6b
...
@@ -60,27 +60,53 @@ class DwtSTBaseReport(object):
...
@@ -60,27 +60,53 @@ class DwtSTBaseReport(object):
df_rank_sv
.
show
(
10
,
False
)
df_rank_sv
.
show
(
10
,
False
)
# 搜索词主表
# 搜索词主表
sql2
=
f
"""
# ===== 原逻辑(保留备查):从 dwt_aba_st_analytics 取词集合(st_key + search_term) =====
select
# 问题:dwt_aba_st_analytics = 爬虫 ∩ ABA,某月爬虫漏抓 → 该词该月不在 → 下面与排名 inner join 后,
id as st_key,
# 趋势图那一月断格(排名很好的词突然缺一点)。
search_term
# sql2 = f"""
from dwt_aba_st_analytics
# select
where site_name = '{self.site_name}'
# id as st_key,
and date_type = '{self.date_type}'
# search_term
and date_info = '{self.date_info}';
# from dwt_aba_st_analytics
# where site_name = '{self.site_name}'
# and date_type = '{self.date_type}'
# and date_info = '{self.date_info}';
# """
# 【改】st_key 改从 ods_st_key 取(全站"词→key"映射,与 dwt_st_sv_last365 / backfill 同款);
# 词集合不再被 dwt 卡,改由下面 dim_st_detail 的排名表(sql3)驱动 → inner join 后 = 当月 ABA 有 key 的词。
sql2
=
f
"""
select
st_key,
search_term
from ods_st_key
where site_name = '{self.site_name}';
"""
"""
df_st_base
=
self
.
spark
.
sql
(
sql2
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
df_st_base
=
self
.
spark
.
sql
(
sql2
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
print
(
"搜索词主表:"
)
print
(
"搜索词主表:"
)
df_st_base
.
show
(
10
,
False
)
df_st_base
.
show
(
10
,
False
)
# 读ods_brand_analytics表,获取报告中的搜索词+排名
# 读ABA搜索词+排名(口径统一到 dim_st_detail,词集合由它驱动)
# ===== 原逻辑(保留备查):从 ods_brand_analytics 取 search_term + rank =====
# 原本词集合被上面 dwt(sql2) 卡住,这里的 ods rank 只作补值;为口径统一、且 ods 月分区可能一词多行,
# 改从 dim_st_detail 取(排名同源:dim.st_rank ← ods.rank,且已按词去重、一词一月一行)。
# sql3 = f"""
# select
# search_term,
# rank as st_rank
# from ods_brand_analytics
# where site_name = '{self.site_name}'
# and date_type = '{self.date_type}'
# and date_info = '{self.date_info}';
# """
# 【改】改读 dim_st_detail(ABA 清洗表,st_rank 即排名):由它驱动词集合 →
# 当月 ABA 有的词趋势图都有排名点,漏抓月不再断格;与月表/年表口径统一到 dim_st_detail。
sql3
=
f
"""
sql3
=
f
"""
select
select
search_term,
search_term,
rank as st_rank
st_rank as st_rank
from
ods_brand_analytics
from
dim_st_detail
where site_name = '{self.site_name}'
where site_name = '{self.site_name}'
and date_type = '{self.date_type}'
and date_type = '{self.date_type}'
and date_info = '{self.date_info}';
and date_info = '{self.date_info}';
"""
"""
df_st_rank
=
self
.
spark
.
sql
(
sql3
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
df_st_rank
=
self
.
spark
.
sql
(
sql3
)
.
repartition
(
40
,
'search_term'
)
.
cache
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment