当前位置: 首页 > wzjs >正文

怎样做网站编辑百度自然排名优化

怎样做网站编辑,百度自然排名优化,个人域名备案流程,营销型网站建设信融问题描述 我们需要确定"ABC_manage_channel"列的逻辑,该列的值在客户连续在同一渠道下单时更新为当前渠道,否则保留之前的值。具体规则如下: 初始值为第一个订单的渠道如果客户连续两次在同一渠道下单,则更新为当前渠…

问题描述

我们需要确定"ABC_manage_channel"列的逻辑,该列的值在客户连续在同一渠道下单时更新为当前渠道,否则保留之前的值。具体规则如下:

  • 初始值为第一个订单的渠道
  • 如果客户连续两次在同一渠道下单,则更新为当前渠道
  • 否则保持前一个值不变

数据准备

首先创建orders表并插入测试数据:

CREATE OR REPLACE TABLE orders (customerid INTEGER,channel VARCHAR(20),order_date DATE
);INSERT INTO orders (customerid, channel, order_date) VALUES
(1, 'TMALL', '2024-11-01'),
(1, 'TMALL', '2024-11-02'),
(1, 'TMALL', '2024-11-03'),
(1, 'douyin', '2024-11-25'),
(1, 'JD', '2025-01-13'),
(1, 'JD', '2025-01-14'),
(1, 'douyin', '2025-03-02'),
(1, 'douyin', '2025-03-27'),
(3, 'JD', '2024-04-23'),
(4, 'JD', '2025-02-15'),
(5, 'JD', '2024-08-30'),
(6, 'douyin', '2024-10-05'),
(7, 'JD', '2024-05-29'),
(7, 'douyin', '2024-09-15'),
(7, 'Wholesale', '2024-12-22'),
(7, 'JD', '2025-03-19'),
(8, 'douyin', '2024-08-01'),
(8, 'douyin', '2024-08-07'),
(8, 'douyin', '2024-11-15'),
(9, 'JD', '2025-03-19'),
(10, 'douyin', '2024-07-30'),
(10, 'douyin', '2024-12-27'),
(10, 'douyin', '2025-03-21'),
(10, 'douyin', '2025-03-23');

解决方案

方法一:使用SparkSQL(结合UDF)

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import ArrayType, StringType, StructType, StructField, DateType# 初始化Spark会话
spark = SparkSession.builder.appName("ABCManageChannel").getOrCreate()# 创建并插入测试数据
spark.sql("""
CREATE OR REPLACE TABLE orders (customerid INTEGER,channel VARCHAR(20),order_date DATE
) USING parquet;INSERT INTO orders VALUES
(1, 'TMALL', '2024-11-01'),
(1, 'TMALL', '2024-11-02'),
(1, 'TMALL', '2024-11-03'),
(1, 'douyin', '2024-11-25'),
(1, 'JD', '2025-01-13'),
(1, 'JD', '2025-01-14'),
(1, 'douyin', '2025-03-02'),
(1, 'douyin', '2025-03-27'),
(3, 'JD', '2024-04-23'),
(4, 'JD', '2025-02-15'),
(5, 'JD', '2024-08-30'),
(6, 'douyin', '2024-10-05'),
(7, 'JD', '2024-05-29'),
(7, 'douyin', '2024-09-15'),
(7, 'Wholesale', '2024-12-22'),
(7, 'JD', '2025-03-19'),
(8, 'douyin', '2024-08-01'),
(8, 'douyin', '2024-08-07'),
(8, 'douyin', '2024-11-15'),
(9, 'JD', '2025-03-19'),
(10, 'douyin', '2024-07-30'),
(10, 'douyin', '2024-12-27'),
(10, 'douyin', '2025-03-21'),
(10, 'douyin', '2025-03-23');
""")# 读取数据并按客户分组排序
orders_df = spark.table("orders")# 定义UDF处理渠道序列
def calculate_abc(channels):abc = []prev_channel = Nonecurrent_abc = Nonefor idx, c in enumerate(channels):if idx == 0:current_abc = celse:if c == prev_channel:current_abc = c# 否则保持前一个current_abcabc.append(current_abc)prev_channel = creturn abcudf_calculate_abc = F.udf(calculate_abc, ArrayType(StringType()))# 使用SparkSQL处理
result_sql = spark.sql("""
WITH sorted_orders AS (SELECT customerid, channel, order_date,ROW_NUMBER() OVER (PARTITION BY customerid ORDER BY order_date) AS rnFROM orders
),
grouped AS (SELECT customerid, COLLECT_LIST(channel) OVER (PARTITION BY customerid ORDER BY order_date) AS channels,COLLECT_LIST(order_date) OVER (PARTITION BY customerid ORDER BY order_date) AS order_datesFROM sorted_orders
)
SELECT customerid, order_date, channel, abc
FROM (SELECT customerid, EXPLODE(ARRAYS_ZIP(order_dates, channels, abc_list)) AS dataFROM (SELECT customerid, order_dates, channels,udf_calculate_abc(channels) AS abc_listFROM grouped)
)
SELECT customerid, data.order_dates AS order_date,data.channels AS channel,data.abc_list AS ABC_manage_channel
""")result_sql.show()

方法二:不使用SparkSQL(使用DataFrame API)

# 使用DataFrame API处理
window_spec = Window.partitionBy("customerid").orderBy("order_date")# 收集每个客户的订单渠道并按时间排序
grouped_df = orders_df.withColumn("rn", F.row_number().over(window_spec)) \.groupBy("customerid") \.agg(F.collect_list(F.struct("order_date", "channel")).alias("orders"))# 定义UDF处理订单序列
schema = ArrayType(StructType([StructField("order_date", DateType()),StructField("channel", StringType()),StructField("ABC_manage_channel", StringType())
]))def process_orders(orders):abc_list = []prev_channel = Nonecurrent_abc = Nonesorted_orders = sorted(orders, key=lambda x: x.order_date)for idx, order in enumerate(sorted_orders):if idx == 0:current_abc = order.channelelse:if order.channel == prev_channel:current_abc = order.channelabc_list.append((order.order_date, order.channel, current_abc))prev_channel = order.channelreturn abc_listudf_process_orders = F.udf(process_orders, schema)# 应用UDF并展开结果
result_df = grouped_df.withColumn("processed", udf_process_orders("orders")) \.select(F.explode("processed").alias("data")) \.select(F.col("data.order_date").alias("order_date"),F.col("data.channel").alias("channel"),F.col("data.ABC_manage_channel").alias("ABC_manage_channel"))result_df.show()

解释

  • 方法一使用SparkSQL结合UDF,通过窗口函数排序并收集渠道数据,使用UDF处理每个客户的订单序列,生成ABC管理渠道列。
  • 方法二使用DataFrame API,通过分组和聚合操作收集订单数据,利用UDF处理每个分组内的订单序列,最后展开结果。
http://www.dtcms.com/wzjs/514094.html

相关文章:

  • 深圳专业做网站网络营销出来做什么
  • 做单机游戏破解的网站页面设计漂亮的网站
  • 游戏创造器成都seo技术经理
  • 上线公司 企业网站百度投诉电话客服24小时
  • ps做的图片能做直接做网站吗怎么优化推广自己的网站
  • 东莞公司建设网站制作广州网站定制多少钱
  • 余姚网站建设设计厦门关键词优化seo
  • 网站建设会计线上线下整合营销方案
  • 城阳网站开发公司电话百度平台推广
  • 网站开发运行详细步骤免费注册网页网址
  • 网站建设智能优化seo是什么意思中文
  • 活动营销推广方案廊坊seo关键词排名
  • 网站开发并发处理百度seo发帖推广
  • 天蓝色网站成都高端企业网站建设
  • 东营设计网站建设张家界网站seo
  • 移动网站建设的前景在线超级外链工具
  • 风险的网站怎么出现天天自学网网址
  • 网站建设400电话链接推广
  • 侯马市网站建设公司广州seo网站管理
  • 建设外贸网站费用指数基金定投技巧
  • 河池企业网站开发公司年轻人不要做网络销售
  • 怎么看网站是谁做的罗湖区seo排名
  • 企业做网站营销的四大途径大连网站建设费用
  • 扬州网站建设哪家公司好上海今日头条新闻
  • 个人网站做淘宝客商城免费网站怎么注册
  • app制作平台大全班级优化大师免费下载
  • 企业网站建设重要性产品市场调研怎么做
  • 沧州北京网站建设百度推广登录入口下载
  • 做淘宝客网站需要做后台吗百度手机助手下载正版
  • 怎样建设企业网站 用于宣传微信管理系统软件