Ошибка сохранения данных в формате `delta` в Jupyter с ядром Spylon

#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, она по-прежнему завершается с той же ошибкой.