我的目标是每天每隔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分钟显示一次汇总数据?
更新:希望获取数据结果类似
答案 0 :(得分:0)
您已经导入了带有别名的函数(我认为这是一个好习惯):
import pyspark.sql.functions as F
这意味着您需要使用F
变量来使用诸如F.to_date
之类的导入函数。您正在使用的函数是SQL查询函数,并不属于pyspark.sql.functions中可用的实际函数(有关可用函数的列表,请参见文档here)
要解决您在Spark中的问题,我将使用dataFrame,然后使用spark函数对它进行处理以计算结果。
下一次P.S,最好发布实际的错误消息,而不是声明火花“抱怨”;)