Спарк SQL интервал дат SQL запрос не работает - PullRequest
0 голосов
/ 06 сентября 2018

Цель, которую я имею, состоит в том, чтобы показывать данные (полученные из CSV-файла) для каждого 15-минутного интервала в день.

Решение, которое я приду, представляет собой 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

Но как только я хочу использовать это в своем Python-коде Spark, он жалуется на 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

Что я должен сделать, чтобы это работало? Я предпочитаю, чтобы мой запрос работал, если нет, то как в общем случае я могу отображать агрегированные данные за каждые 15 минут в spark python?

ОБНОВЛЕНИЕ: поиск данных в результате выглядит примерно так:

enter image description here

1 Ответ

0 голосов
/ 06 сентября 2018

Вы импортировали функции с псевдонимом (что я считаю хорошей практикой):

import pyspark.sql.functions as F

Это означает, что вам нужно использовать переменную F для использования импортированных функций, таких как F.to_date. Используемые вами функции являются запросами SQL и не относятся к фактическим функциям, доступным в pyspark.sql.functions (список доступных функций см. В документации здесь )

Чтобы решить вашу проблему в Spark, я бы использовал dataFrame, а затем поработал над ним, чтобы вычислить ваши результаты с помощью функций искры.

P.S. В следующий раз лучше опубликовать реальное сообщение об ошибке, чем указывать, что искра "жалуется";)

...