#apache-spark #jupyter-notebook #delta-lake
#apache-spark #jupyter-ноутбук #дельта-озеро
Вопрос:
Я сталкиваюсь с ошибкой при сохранении данных в delta
формате:
$ data.write.format("delta").save("gs://xxx/delta-table1")
org.apache.spark.SparkException: Job aborted.
at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:198)
...
Caused by: java.lang.ArrayStoreException: org.apache.spark.sql.delta.actions.AddFile
at scala.runtime.ScalaRunTime$.array_update(ScalaRunTime.scala:75)
at scala.Array$.slowcopy(Array.scala:84)
at scala.Array$.copy(Array.scala:110)
...
at scala.collection.AbstractTraversable.toArray(Traversable.scala:108)
at org.apache.spark.sql.delta.files.DelayedCommitProtocol.commitJob(DelayedCommitProtocol.scala:59)
at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:187)
Ошибка возникает только тогда, когда я использую Jupyter с ядром Spylon, если я использую spark-shell, он просто работает. Есть идеи о возможной причине?
В spark-shell:
$ spark-shell --packages io.delta:delta-core_2.12:0.4.0
scala> import io.delta._
import io.delta._
scala> val data = spark.range(0,5)
data: org.apache.spark.sql.Dataset[Long] = [id: bigint]
scala> data.write.format("delta").save("gs://xxx/delta-table1")
scala> val df = spark.read.format("delta").load("gs://xxx/delta-table1")
df: org.apache.spark.sql.DataFrame = [id: bigint]
scala> df.show()
---
| id|
---
| 2|
| 3|
| 4|
| 0|
| 1|
---
В Jupyter с ядром Spylon:
[0] %%init_spark
launcher.packages = [
"io.delta:delta-core_2.12:0.4.0"
]
[1] import io.delta._
val data = spark.range(0,5)
data.write.format("delta").save("gs://xxx/delta-table1")
org.apache.spark.SparkException: Job aborted.
...
Caused by: java.lang.ArrayStoreException: org.apache.spark.sql.delta.actions.AddFile
Ответ №1:
Как я вижу, spylon
ядро компилируется только для Scala 2.11 и Spark 2.x. Вы используете версию Delta, скомпилированную для Scala 2.12 (см. _2.12
В названии пакета), и, как результат, она несовместима со spylon. Вам нужно понизить версию Spark до версии, скомпилированной с Scala 2.11, например 2.4.7, затем вы можете использовать ее с Spylon.
PS Кроме того, имеет смысл использовать более новую версию Delta — 0.4.0 довольно старая. Последняя версия, совместимая со Scala 2.11, — 0.6.1…
Комментарии:
1. Спасибо за ваш ответ, но я попытался понизить версию Scala моего кластера до 2.11.12 с помощью Spark 2.4.7, она по-прежнему завершается с той же ошибкой.