sql - spark sql日期间隔sql查询不起作用
问题描述
我的目标是每天每隔 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 分钟的聚合数据吗?
更新:希望得到类似的数据结果:
解决方案
您已经导入了带有别名的函数(我认为这是一个很好的做法):
import pyspark.sql.functions as F
这意味着您需要使用F
变量来使用导入的函数,例如F.to_date
. 您使用的函数是 SQL 查询函数,不属于 pyspark.sql.functions 中可用的实际函数(有关可用函数列表,请参阅此处的文档)
为了解决您在 Spark 中的问题,我将使用一个 dataFrame,然后使用 spark 函数对其进行处理以计算您的结果。
PS下一次,最好发布实际的错误消息而不是说火花“抱怨”;)
推荐阅读
- android - Android 检测附近的设备(Covid-19 应用程序)
- html - 响应式按钮添加到购物车的问题(调整页面宽度)
- python - djangosaml2 对用户进行身份验证,但我认为匿名用户
- nginx - Nginx Conf 冲突 www 502
- symfony - 如何在 Doctrine 上自定义 FOREIGN KEY 消息?API平台
- python - Docker MYSQL [2003] 无法连接到 MySQL 服务器(111 连接被拒绝)
- javascript - 如何使用 onClick 事件渲染一些 JSX?
- javascript - 无法从 Firebase 检索日期
- python - 终端的 Python 彩色文本
- python - 如何在python中的多个字典列表中查找项目的累积总和