pyspark 上的 SparkSQL:如何生成时间序列? [英] SparkSQL on pyspark: how to generate time series?

查看:46
本文介绍了pyspark 上的 SparkSQL:如何生成时间序列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 pyspark 上使用 SparkSQL 将一些 PostgreSQL 表存储到 DataFrames 中,然后构建一个查询,该查询基于 startstop 类型的列生成多个时间序列<代码>日期.

I'm using SparkSQL on pyspark to store some PostgreSQL tables into DataFrames and then build a query that generates several time series based on a start and stop columns of type date.

假设 my_table 包含:

 start      | stop       
-------------------------
 2000-01-01 | 2000-01-05 
 2012-03-20 | 2012-03-23 

在 PostgreSQL 中很容易做到这一点:

In PostgreSQL it's very easy to do that:

SELECT generate_series(start, stop, '1 day'::interval)::date AS dt FROM my_table

它会生成这个表:

 dt
------------
 2000-01-01
 2000-01-02
 2000-01-03
 2000-01-04
 2000-01-05
 2012-03-20
 2012-03-21
 2012-03-22
 2012-03-23

但是如何使用普通的 SparkSQL 做到这一点?是否有必要使用 UDF 或某些 DataFrame 方法?

but how to do that using plain SparkSQL? Will it be necessary to use UDFs or some DataFrame methods?

推荐答案

假设你有来自 spark sql 的数据帧 df,试试这个

Suppose you have dataframe df from spark sql, Try this

from pyspark.sql.functions as F
from pyspark.sql.types as T

def timeseriesDF(start, total):
    series = [start]
    for i xrange( total-1 ):
        series.append(
            F.date_add(series[-1], 1)
        )
    return series

df.withColumn("t_series", F.udf(
                timeseriesDF, 
                T.ArrayType()
            ) ( df.start, F.datediff( df.start, df.stop ) ) 
    ).select(F.explode("t_series")).show()

这篇关于pyspark 上的 SparkSQL:如何生成时间序列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆