Pyspark 从spark api中的字符串列(日期时间戳)中提取周天数
我是Spark API的新手。我试图从列中提取工作日编号,例如col_date(具有日期时间戳,例如'13AUG15:09:40:15'),这是字符串,并添加另一列作为工作日(整数)。我不能成功地做这件事 这很简单 此简单函数生成所有作业,并以数字形式返回工作日(星期一=1):Pyspark 从spark api中的字符串列(日期时间戳)中提取周天数,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我是Spark API的新手。我试图从列中提取工作日编号,例如col_date(具有日期时间戳,例如'13AUG15:09:40:15'),这是字符串,并添加另一列作为工作日(整数)。我不能成功地做这件事 这很简单 此简单函数生成所有作业,并以数字形式返回工作日(星期一=1): 有关日期时间处理的更多详细信息,请参阅。下面的方法对我很有效,使用了“一行”自定义项-与上面的方法类似但不同: from pyspark.sql import SparkSession, functions spar
有关日期时间处理的更多详细信息,请参阅。下面的方法对我很有效,使用了“一行”自定义项-与上面的方法类似但不同:
from pyspark.sql import SparkSession, functions
spark = SparkSession.builder.appName('dayofweek').getOrCreate()
设置数据帧:
df = spark.createDataFrame(
[(1, "2018-05-12")
,(2, "2018-05-13")
,(3, "2018-05-14")
,(4, "2018-05-15")
,(5, "2018-05-16")
,(6, "2018-05-17")
,(7, "2018-05-18")
,(8, "2018-05-19")
,(9, "2018-05-20")
], ("id", "date"))
设置udf:
from pyspark.sql.functions import udf,desc
from datetime import datetime
weekDay = udf(lambda x: datetime.strptime(x, '%Y-%m-%d').strftime('%w'))
df = df.withColumn('weekDay', weekDay(df['date'])).sort(desc("date"))
结果:
df.show()
+---+----------+-------+
| id| date|weekDay|
+---+----------+-------+
| 9|2018-05-20| 0|
| 8|2018-05-19| 6|
| 7|2018-05-18| 5|
| 6|2018-05-17| 4|
| 5|2018-05-16| 3|
| 4|2018-05-15| 2|
| 3|2018-05-14| 1|
| 2|2018-05-13| 0|
| 1|2018-05-12| 6|
+---+----------+-------+
您使用的是RDD还是数据帧可能存在重复?@nightingalen:我使用的是数据帧我忘记了重要的部分,.strftime('%w')生成了神奇的周数和返回数。我得到了一个attributeerror:'str'没有属性'map'。但是,我可以运行v=datetime.strtime(“%13AUG15:09:40:15”,“d%b%y:%H:%M:%S”).strftime(“%w”),它返回值4。谢谢你的时间!
df.show()
+---+----------+-------+
| id| date|weekDay|
+---+----------+-------+
| 9|2018-05-20| 0|
| 8|2018-05-19| 6|
| 7|2018-05-18| 5|
| 6|2018-05-17| 4|
| 5|2018-05-16| 3|
| 4|2018-05-15| 2|
| 3|2018-05-14| 1|
| 2|2018-05-13| 0|
| 1|2018-05-12| 6|
+---+----------+-------+