java .lang.IllegalArgumentException: недопустимая последовательность границ Spark - PullRequest
0 голосов
/ 18 февраля 2020

Я использую Azure Базы данных и Scala. Я хочу показать () Dataframe, но я получил ошибку, которую не могу понять, и я хотел бы ее решить. У меня есть следующие строки кода:

println("----------------------------------------------------------------Printing schema")
df.printSchema()
println("----------------------------------------------------------------Printing dataframe")
df.show()
println("----------------------------------------------------------------Error before")

Стандартный вывод следующий, сообщение "--------------------- ------------------------------------------- Ошибка до "не появляется .

>     ----------------------------------------------------------------Printing schema
>     root
>      |-- processed: integer (nullable = false)
>      |-- processDatetime: string (nullable = false)
>      |-- executionDatetime: string (nullable = false)
>      |-- executionSource: string (nullable = false)
>      |-- executionAppName: string (nullable = false)
>     
>     ----------------------------------------------------------------Printing dataframe
>     2020-02-18T14:19:00.069+0000: [GC (Allocation Failure) [PSYoungGen: 1497248K->191833K(1789440K)] 2023293K->717886K(6063104K),
> 0.0823288 secs] [Times: user=0.18 sys=0.02, real=0.09 secs] 
>     2020-02-18T14:19:40.823+0000: [GC (Allocation Failure) [PSYoungGen: 1637209K->195574K(1640960K)] 2163262K->721635K(5914624K),
> 0.0483384 secs] [Times: user=0.17 sys=0.00, real=0.05 secs] 
>     2020-02-18T14:19:44.843+0000: [GC (Allocation Failure) [PSYoungGen: 1640950K->139092K(1809920K)] 2167011K->665161K(6083584K),
> 0.0301711 secs] [Times: user=0.11 sys=0.00, real=0.03 secs] 
>     2020-02-18T14:19:50.910+0000: Track exception: Job aborted due to stage failure: Task 59 in stage 62.0 failed 4 times, most recent
> failure: Lost task 59.3 in stage 62.0 (TID 2672, 10.139.64.6, executor
> 1): java.lang.IllegalArgumentException: Illegal sequence boundaries:
> 1581897600000000 to 1581811200000000 by 86400000000
>       at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage23.processNext(Unknown
> Source)
>       at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
>       at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$15$$anon$2.hasNext(WholeStageCodegenExec.scala:659)
>       at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409)
>       at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:125)
>       at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
>       at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:55)
>       at org.apache.spark.scheduler.Task.doRunTask(Task.scala:139)
>       at org.apache.spark.scheduler.Task.run(Task.scala:112)
>       at org.apache.spark.executor.Executor$TaskRunner$$anonfun$13.apply(Executor.scala:497)
>       at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1526)
>       at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:503)
>       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
>     
>     Driver stacktrace:.
>     2020-02-18T14:19:50.925+0000: Track message: Process finished with exit code 1. Metric: Writer. Value: 1.0.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Трудно точно узнать, не увидев ваш код, но у меня была похожая ошибка, и другой ответ (о int вне диапазона) ввел меня в заблуждение.

java.lang.IllegalArgumentException вы получаете сбивает с толку, но на самом деле довольно конкретно c:

Illegal sequence boundaries: 1581897600000000 to 1581811200000000 by 86400000000

Эта ошибка жалуется, что вы используете функцию sequence() spark SQL, и вы говорите это go от 1581897600000000 до 1581811200000000 от 86400000000. Это легко пропустить из-за больших чисел, но это инструкция go из большее число до меньшее число на приращение положительного целого числа. Например, от 12 до 6 от 3.

Это не разрешено согласно DataBricks документация :

  • start - выражение. Начало диапазона.
  • stop - выражение. Конец диапазона (включительно).
  • step - необязательное выражение. Шаг диапазона. По умолчанию шаг равен 1, если начало меньше или равно остановке, иначе -1. Для временных последовательностей это 1 день и -1 день соответственно. Если начало больше остановки, тогда шаг должен быть отрицательным, и наоборот.

Кроме того, я считаю, что в другом ответе на столбец int вводит в заблуждение. Большие числа, упомянутые в ошибке недопустимой последовательности, выглядят так, как будто они взяты из столбца даты. У вас нет никаких столбцов DateType, но ваши строковые столбцы названы как столбцы даты; по-видимому, вы используете их в функции последовательности, и они приводятся к датам.

0 голосов
/ 18 февраля 2020

Ваша схема ожидает int, int в Java имеет максимальный размер [-2 147 483 648 до +2 147 483 647] .

Так что я бы изменил схему с int на long.

...