pyspark Dataframe - усеченный десятичный столбец - PullRequest
2 голосов
/ 10 апреля 2019

Я пытаюсь усечь значение в столбце, а также взять его минимум, если условие не равно 1, то в нем должно быть 20, я попытался использовать math.trunc для усечения.но есть ошибка усечения

Traceback (последний вызов был последним): файл "", строка 6, в AttributeError: trunc

Это то, что я пробовал:

lspf_ret.groupBy(col("lsbrnm"),col("lsdlp"),col("lsdlr")).agg({'lsdte':'min'}).select(
    lspf_ret.lsbrnm,
    lspf_ret.lsdlp,
    lspf_ret.lsdlr,
    datediff(lit('2019-02-28 00:00:00').cast(TimestampType()),
    concat(when( lit(math.trunc(col("min(lsdte)")/1000000)) ==1,"20").otherwise(''),
           when(math.trunc(((col("min(lsdte)")/1000000)==0,"19").otherwise("")),
           right(left(col("min(lsdte)").cast(StringType()),3),2),
    lit('-'),
    left(right(col("min(lsdte)").cast(StringType()),4),2),
    lit('-'),
    right(col("min(lsdte)").cast(StringType()),2),
    lit("00:00:00")
    ).cast(TimestampType()))))

Вот входные данные:

+------+-----+-------------+----------+
|lsbrnm|lsdlp|        lsdlr|min(lsdte)|
+------+-----+-------------+----------+
|  0135|  HP2|1061129000003|   1120929|
|  2266|  EF4| 160301212861|   1180224|
|  2266|  EF4| 170901365509|   1190225|
|  2266|  EF4| 180201399924|   1190225|
|  2266|  EF4| 180401421697|   1190201|
|  2266|  EF4| 131201027045|   1171130|
|  2266|  EF4| 140901072492|   1170301|
|  2266|  EF4|   1812M03566|   1190225|
...