spark sql日期间隔sql查询不起作用

Posted

技术标签:

【中文标题】spark sql日期间隔sql查询不起作用【英文标题】:spark sql date interval sql query not working 【发布时间】:2018-09-06 12:19:06 【问题描述】:

我的目标是每天每隔 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 分钟的聚合数据吗?

更新:希望得到类似的数据结果:

【问题讨论】:

【参考方案1】:

你已经导入了带有别名的函数(我认为这是一个很好的做法):

import pyspark.sql.functions as F

这意味着您需要使用F 变量来使用F.to_date 等导入函数。您使用的函数是 SQL 查询函数,不属于 pyspark.sql.functions 中可用的实际函数(可用函数列表请参阅文档here)

为了解决您在 Spark 中的问题,我将使用一个 dataFrame,然后使用 spark 函数对其进行计算以计算您的结果。

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

【讨论】:

以上是关于spark sql日期间隔sql查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误

使用日期字符串作为参数的 sql 查询不起作用

SQL 查询:HAVING date = MAX(date) 不起作用

SQL 查询不起作用 - 使用 Where 条件不匹配

Spark-submit Sql Context Create Statement 不起作用

SQL / MS Access - 为啥这个 CASE 不起作用?