过滤并保存数据帧的前X行

时间:2017-03-18 09:04:50

标签: apache-spark pyspark spark-dataframe spark-csv

我使用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

我知道这应该是colwrite.csv的组合,但我不确定如何正确地将这些用于我的意图。

我目前的代码是:

encodeUDF = udf(encode_time, StringType())
log_df = log_df.withColumn('timePeriod', encodeUDF(col('START_TIME')))

在添加专栏后,我猜测我应该使用类似的内容:

log_df.select(col('timePeriod') == 'Weekday').write.csv(....)

有人可以帮助我填补空白,以符合我的意图吗?

2 个答案:

答案 0 :(得分:1)

<击> unix_timestampdate_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..")