当前位置: 首页 > 知识库问答 >
问题:

spark sql日期间隔sql查询不工作

桂嘉年
2023-03-14

我的目标是每天每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。

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

共有1个答案

亢嘉茂
2023-03-14

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

import pyspark.sql.functions as F

这意味着您需要使用f变量来使用导入的函数,如f.to_date。您使用的函数是SQL查询函数,不属于pyspark.SQL.functions中可用的实际函数(请参阅此处的文档以获得可用函数列表)

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

 类似资料:
  • 问题内容: 我正在管理事件数据库。每个事件都有开始和结束时间戳记()。 目前,我可以通过一个SQL查询执行以下操作: 建立日历,并记下发生事件的日期 列出给定日期(YYYY / MM / DD,YYYY / MM)中发生的事件 问题是当一个事件跨越几天时,我无法在它的开始和结束时间戳之间的日期列出它。 例如: 活动开始于2011/05/25和结束于2011/05/27,但我无法在页面2011/05

  • 问题内容: 我想创建一个Ecto查询,该查询按表的年龄(即“最小年龄(月)->最大年龄(月)”)过滤表中的记录。 一种简单的方法是Ecto功能: 这样做的问题是,并非所有孩子都在同一时区,当然也不是所有孩子都在同一时区。该查询将非常接近,但没有发现(有些会在一天之内关闭)。 我一直在尝试使用PostgreSQL的功能来使此查询工作。我可以使用SQL客户端使其正常工作,但是在尝试对片段中的值进行插值

  • 问题内容: 我需要有关SQL查询的帮助。 我正在尝试从表中选择所有记录,这些记录将不能在两个日期“ 2009-12-15”和“ 2010-01-02”之间容纳。 这是我的表结构: 我的查询: 知道为什么我的查询选择错误的记录吗?我应该将查询中的值顺序更改为类似以下内容: 非常感谢您的帮助 问题答案: 如何尝试: 它将返回所有与您的日期范围完全不重叠的日期范围。

  • 问题内容: 我在使用Excel和Access数据库在VBA中进行sql查询时遇到问题。在mi VBA代码中,我有两个具有以下内容的数据变量: DateMin = 31/07/2014 22:00:00 DateMax = 01/08/2014 06:00:00 而且我有一个访问数据库,其中包含许多带有日期字段的数据。我试图从数据库中提取两个变量之间具有日期的数据,并对此进行编码: 但是不起作用。结

  • 我试图在MongoDb上获取一个名为“fecha”的日志,其中包含一个日期字段。 在Java中执行代码后,我得到下一个查询: 但是我没有得到任何结果。以下是一些数据样本: 我的Java代码是下一个: 谢谢

  • 问题内容: 假设我在Sql Server 2008中具有下表: 如您所见,该表具有StartDate和EndDate列。我想验证这些列中的数据。间隔不能相互冲突。因此,上面的表是有效的,但是下一个表是无效的,因为第一行的结束日期大于第二行的StartDate。 在这里表示无穷大。 您能帮我写一个脚本进行数据验证吗? [第二项任务] 感谢您的回答。我很复杂。假设我有这样的表: 在这里,我想验证一组中

  • 问题内容: 我有一个和。我想获取这两个日期之间的日期列表。谁能帮助我指出查询中的错误。 这是一个变量。 问题答案: 您应该将这两个日期放在单引号之间,例如。 或可以使用 请记住,第一个日期是包含日期,但第二个日期是排除日期,因为它实际上是“ 2011/02/27 00:00:00”

  • 问题内容: 我有一个包含2个字段的表:唯一ID,用户ID(外键)和日期时间。这是对服务的访问日志。我在SQL Server中工作,但我希望得到不可知论的答案。 我想使用SQL为最长间隔开始的特定用户查找ID。 因此,举例来说,假设我的值如下(为一位用户简化): 如果我搜索用户1的最长间隔,我将得到ID 2(也可以在那儿获得间隔的长度,但不那么关键)。 在SQL中最有效的方法是什么? 注意:ID不一