我们往往需要利用url中夹带的参数进行数据分析,例如一个url
https://abc.com/*****/detail?id=132&channel_code=11-132-c:channelTwo
如何提取出url中的id,channel_code等参数进行数据分析呢?可以巧妙利用substring_index函数。
substring_index(str,delim,count)-在分隔符delim出现计数之前,从str返回子字符串。如果count为正,则返回最后一个分隔符左侧的所有内容(从左侧开始计数)。如果count为负,则返回最后一个分隔符右侧的所有内容(从右侧开始计数)。函数substring_index在搜索delim时执行区分大小写的匹配。
a_df = (df.filter(substring_index(df["path"], "id=", -1).contains("&channel_code=")).filter("path like '%/****/detail?id=%'").withColumn("param", substring_index(df["path"], "?", -1)))
b_df = a_df.withColumn('project_id', substring_index(substring_index(a_df["param"], "id=", -1), "&", 1))
.withColumn('event_type', substring_index(substring_index(a_df["param"], "&channel_code=", -1), "-", 1))
.withColumn('channel_code', substring_index(substring_index(a_df["param"], ":", -1), "&", 1))
.withColumn('channel', substring_index(substring_index(a_df["param"], ":", 1), '-', -1))
运行结果: