Spark SQL日期间隔SQL查询不起作用

时间:2018-09-06 12:19:07

标签: sql apache-spark pyspark bigdata sql-function

我的目标是每天每隔15分钟显示一次数据(由csv文件提供)。

我提出的解决方案是创建所需数据的sql查询:

select 
    dateadd(minute, datediff(minute, 0, cast ([date] + ' ' + [time] as datetime2) ) / 15 * 15, 0) as dateInterval,
    SecurityDesc,
    StartPrice,
    SUM(CAST(TradedVolume as decimal(18,2))) as totalTradedVolume,
    SUM(cast(NumberOfTrades as int)) as totalNumberOfTrades,
    ROW_NUMBER() over(PARTITION BY dateadd(minute, datediff(minute, 0, cast ([date] + ' ' + [time] as datetime) ) / 15 * 15, 0) ORDER BY Date) as rn
from MyTable
group by [date],[time],SecurityDesc,StartPrice

但是一旦我想在Spark python代码中使用它,它就会抱怨datediff / dateadd甚至转换为datetime。

我知道它可能看不到sql函数,但是我已经导入了:

from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
from pyspark.sql import Row
import pyspark.sql.functions as F
from datetime import datetime as d
from pyspark.sql.functions import datediff, to_date, lit

我应该怎么做才能使其正常工作?我更喜欢使查询正常运行,一般而言,如何在Spark python中每15分钟显示一次汇总数据?

更新:希望获取数据结果类似

enter image description here

1 个答案:

答案 0 :(得分:0)

您已经导入了带有别名的函数(我认为这是一个好习惯):

import pyspark.sql.functions as F

这意味着您需要使用F变量来使用诸如F.to_date之类的导入函数。您正在使用的函数是SQL查询函数,并不属于pyspark.sql.functions中可用的实际函数(有关可用函数的列表,请参见文档here

要解决您在Spark中的问题,我将使用dataFrame,然后使用spark函数对它进行处理以计算结果。

下一次P.S,最好发布实际的错误消息,而不是声明火花“抱怨”;)