我使用pySpark来读取和计算数据帧的统计信息。
数据框如下所示:
TRANSACTION_URL START_TIME END_TIME SIZE FLAG COL6 COL7 ...
www.google.com 20170113093210 20170113093210 150 1 ... ...
www.cnet.com 20170113114510 20170113093210 150 2 ... ...
我在数据框中添加了一个新的timePeriod
列,在添加之后,我希望保存前{50}个记录,timePeriod
匹配一些预定义的值。
我的目的是将这些行保存为带有数据框标题的CSV 。
我知道这应该是col
和write.csv
的组合,但我不确定如何正确地将这些用于我的意图。
我目前的代码是:
encodeUDF = udf(encode_time, StringType())
log_df = log_df.withColumn('timePeriod', encodeUDF(col('START_TIME')))
在添加专栏后,我猜测我应该使用类似的内容:
log_df.select(col('timePeriod') == 'Weekday').write.csv(....)
有人可以帮助我填补空白,以符合我的意图吗?
答案 0 :(得分:1)
<击>
unix_timestamp
和date_format
是有用的方法,因为START_TIME
不是时间戳类型。
dfWithDayNum = log_df.withColumn("timePeriod", date_format(
unix_timestamp(col("START_TIME"), "yyyyMMddHHmmss").cast(TimestampType), "u")
)
击> <击> 撞击>
timePeriod
将有天的星期数(1 =星期一,...,7 =星期日)
dfWithDayNum
.filter(col("timePeriod") < 6) //to filter weekday
.limit(50000) //X lines
.write.format("csv")
.option("header", "true")
.csv("location/to/save/df")
答案 1 :(得分:0)
通过以下方式使用filter()
和limit()
方法解决:
new_log_df.filter(col('timePeriod') == '20161206, Morning').limit(50).write.\
format('csv').option("header", "true").save("..Path..")