使用spylon内核在jupyter中以“delta”格式保存数据时出错

8yparm6h  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(798)

在中保存数据时遇到错误 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内核一起使用时,如果我使用sparkshell它就可以工作。你知道可能的原因吗?
Spark壳内:

$ 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|
+---+

在具有spylon内核的jupyter中:

[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
cngwdvgl

cngwdvgl1#

在我看来 spylon 内核只针对scala2.11和spark2.x编译。您使用的是针对Scala2.12编译的delta版本(请参阅 _2.12 因此,它与spylon不兼容。您需要将spark降级到scala2.11编译的版本,比如2.4.7,然后您就可以将它与spylon一起使用了。
p、 而且,使用更新版本的delta是有意义的-0.4.0已经很旧了。与scala 2.11兼容的最新版本是0.6.1。。。

相关问题