如何过滤DataFrame以仅选择过去12小时?

时间:2017-11-08 13:30:12

标签: python apache-spark pyspark

我有一个包含字段timestamp的不同字段的PySpark DataFrame。

sdata = sc.parallelize([ 
[('id', 1), ('timestamp', 1506339960), ('data_pk', 111)],
[('id', 2), ('timestamp', 1506340140), ('data_pk', 222)],
...
])
# Convert to tuple
sdata_converted = sdata.map(lambda x: (x[0][1], x[1][1], x[2][1]))

# Define schema
sschema = StructType([
    StructField("id", LongType(), True),
    StructField("timestamp", LongType(), True),
    StructField("data_pk", LongType(), True)
])

df = sqlContext.createDataFrame(sdata_converted, sschema)

如何只选择那些引用过去12小时的行?

1 个答案:

答案 0 :(得分:3)

首先获得12小时前的时间戳,

import datetime

twelve_hours = (datetime.datetime.now() - 
                datetime.timedelta(hours = 12)) \
                .strftime("%Y-%m-%d %H:%M:%S")

然后在过滤语句中使用它:

df_new = df.withColumn("timestamp", df.timestamp.cast("timestamp")) \
           .filter(df.timestamp > twelve_hours)