首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从月中的某一天起算平日

如何从月中的某一天起算平日
EN

Stack Overflow用户
提问于 2016-08-13 03:31:52
回答 5查看 53.3K关注 0票数 11

我有一个dataframe log_df:

我根据以下代码生成一个新的dataframe:

代码语言:javascript
代码运行次数:0
运行
复制
from pyspark.sql.functions import split, regexp_extract 
split_log_df = log_df.select(regexp_extract('value', r'^([^\s]+\s)', 1).alias('host'),
                          regexp_extract('value', r'^.*\[(\d\d/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} -\d{4})]', 1).alias('timestamp'),
                          regexp_extract('value', r'^.*"\w+\s+([^\s]+)\s+HTTP.*"', 1).alias('path'),
                          regexp_extract('value', r'^.*"\s+([^\s]+)', 1).cast('integer').alias('status'),
                          regexp_extract('value', r'^.*\s+(\d+)$', 1).cast('integer').alias('content_size'))
split_log_df.show(10, truncate=False)

新的dataframe如下:

我需要另一篇专栏文章来展示一周中的每一天,什么是最好的优雅的方式来创建它?理想情况下,只需在select中添加一个类似于udf的字段。

非常感谢。

更新:我的问题与注释中的问题不同,我需要的是根据log_df中的字符串进行计算,而不是像注释那样基于时间戳,所以这不是一个重复的问题。谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-13 10:57:19

我终于自己解决了这个问题,这是一个完整的解决方案:

  1. 导入date_format、日期时间、DataType
  2. 首先,修改regexp以提取01/Jul/1995
  3. 使用func将01/Jul/1995转换为DateType
  4. 创建一个udf dayOfWeek以获得一周的简短格式(Mon,Tue,.)
  5. 使用udf将DateType 01/Jul/1995转换为星期六的工作日

我对我的解决方案不满意,因为它似乎是如此的锯齿状,如果有人能想出一个更优雅的解决方案,我们将不胜感激,谢谢你提前。

票数 -5
EN

Stack Overflow用户

发布于 2017-06-07 18:13:40

我建议一些不同的方法

代码语言:javascript
代码运行次数:0
运行
复制
from pyspark.sql.functions import date_format
df.select('capturetime', date_format('capturetime', 'u').alias('dow_number'), date_format('capturetime', 'E').alias('dow_string'))
df3.show()

它给了..。

代码语言:javascript
代码运行次数:0
运行
复制
+--------------------+----------+----------+
|         capturetime|dow_number|dow_string|
+--------------------+----------+----------+
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
|2017-06-05 10:05:...|         1|       Mon|
票数 43
EN

Stack Overflow用户

发布于 2021-06-17 11:56:59

从Spark2.3开始,您可以使用一周中的Spark函数https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.dayofweek.html

代码语言:javascript
代码运行次数:0
运行
复制
from pyspark.sql.functions import dayofweek
df.withColumn('day_of_week', dayofweek('my_timestamp'))

然而,这将一周的开始定义为星期日=1。

如果你不想那样做,而是要求星期一= 1,那么你可以做一个不雅的软糖,比如在使用“一周”函数之前减去一天,或者像这样修改结果

代码语言:javascript
代码运行次数:0
运行
复制
from pyspark.sql.functions import dayofweek
df.withColumn('day_of_week', ((dayofweek('my_timestamp')+5)%7)+1)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38928919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档