Столбец DTYPE возвращающий DateTime64 [NS] сравнивается с телом DateTime DTYPEPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Столбец DTYPE возвращающий DateTime64 [NS] сравнивается с телом DateTime DTYPE

Сообщение Anonymous »

import pandas as pd

rate = spark.sql("SELECT C3, CAST(REPLACE(C4, '.','-') AS timestamp) AS `C4`, C5 from " + src_db_name + ".all_corw WHERE _UNITID = 'S01' AND CODAID = 'ALV'")

rate_pd = rate.toPandas()
print(rate_pd.dtypes)
def addVat(rsum, date, vatcd):

rate_final = rate_pd.loc[(rate_pd['C3']==str(vatcd))&(rate_pd['C4'] < date)].sort_values(by=['C4'], ascending=False)

if rate_final.empty:
result = rsum * Decimal(1 + 0/100)
else:
result = rsum * Decimal(1 + int(rate_final['C5'].iloc[0])/100)

return result

def removeVat(rsum, date, vatcd):

rate_final = rate_pd.loc[(rate_pd['C3']==str(vatcd))&(rate_pd['C4'] < date)].sort_values(by=['C4'], ascending=False)

if rate_final.empty:
result = rsum / Decimal(1 + 0/100)
else:
result = rsum / Decimal(1 + int(rate_final['C5'].iloc[0])/100)

return result

spark.udf.register(name = 'addVat_func', f = addVat, returnType=DecimalType())
spark.udf.register(name = 'removeVat_func', f = removeVat, returnType=DecimalType())
< /code>
Имеет проблемы с этим кодом, возвращая DateTime64 [ns] в качестве dtype C4, дополнительно вниз по коду в этом выборе запроса < /p>
select gb._unitid,max(gb.billd) billd,gs.vehiid,sum(removeVat_func(coalesce(gr.rsum,0),coalesce(gb.billd, cast('1900-01-01' as timestamp)),case when gr.vatcd = '' THEN '0' \
else gr.vatcd end)) summa \
from " + src_db_name + ".all_gbil gb inner join " + src_db_name + ".all_gsal gs on gb.gsalid=gs.gsalid and gb._unitid=gs._unitid \
inner join " + src_db_name + ".all_grow gr on gb.gsalid=gr.gsalid and gb.grecno=gr.grecno and gb._unitid=gr._unitid \
where gb.btype in (30,31,33) and (gr.PACKIDIN like '%GARDX%' OR gr.PACKIDIN like '%GARDEX%' OR gr.PACKIDIN like 'JLRGI') and gb._unitid in (select distinct unitid from unittbl) group by gb._unitid,gs.vehiid \
),
< /code>
При сохранении код сравнивает dtype of billd (timeStamp) и C4 (подчиняется от строки к временной метке), в конечном итоге, сталкивается с py4jjavaerror, когда таблица сохраняется. Как я могу гарантировать, что C4 объявляется DateTime DTYPE вместо DateTime64 [NS]. Пса Эта таблица сохраняется в Catalog_schema < /p>

< /p>
Task 1 in stage 4001.0 failed 4 times, most recent failure: Lost task 1.3 in stage 4001.0 (TID 13280) (10.139.64.120 executor 33): org.apache.spark.SparkRuntimeException: [UDF_USER_CODE_ERROR.GENERIC] Execution of function removeVat_func(coalesce(rsum#380619, 0.000000), coalesce(billd#380248, 1900-01-01 00:00:00), CASE WHEN (vatcd#380651 = ) THEN 0 ELSE vatcd#380651 END) failed. == Error == TypeError: Invalid comparison between dtype=datetime64[ns] and datetime
< /code>
Я старался избегать использования панд и вместо этого чисто используемый pyspark, но столкнулся с другой ошибкой, в которой говорится, что предоставленная логика может пройти только через драйвер. Ожидаемое должно быть DTYPE C4 возвращается с DateTime, чтобы, когда мы сохраняем таблицу, C4 и Billd проходили сравнение DTYPE.

Подробнее здесь: https://stackoverflow.com/questions/794 ... dtype-body
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Скрипт Rest Assured в Java, возвращающий структуру ответа с кодом состояния 200, но не с внутренним телом
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Pandas, как передать dtype datetime64 в запросе, не вызывая предупреждения в будущем
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Pandas, как передать dtype datetime64 в запросе, не вызывая предупреждения в будущем
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Преобразование данных datetime64 в datetime в python
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как запретить Pandas конвертировать datetime в datetime64
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»