【发布时间】:2020-03-25 17:12:19
【问题描述】:
SPARK 3.0 无法将 DF 保存为 HDFS 中的增量表
- Scala 版本 2.12.10
- Spark 3.0 版预览
能够在 2.4.4 中执行此操作,但未创建分区。
输入样本:
Vehicle_id|model|brand|year|miles|intake_date_time
v0001H|verna|Hyundai|2011|5000|2018-01-20 06:30:00
v0001F|Eco-sport|Ford|2013|4000|2018-02-10 06:30:00
v0002F|Endeavour|Ford|2011|8000|2018-04-12 06:30:00
v0001L|Gallardo|Lambhorghini|2013|2000|2018-05-16 06:30:00
// reading
val deltaTableInput1 = spark.read
.format("com.databricks.spark.csv")
.option("header","true")
.option("delimiter","|")
.option("inferSchema","true")
.load("file")
.selectExpr("Vehicle_id","model","brand","year","month","miles","CAST(concat(substring(intake_date_time,7,4),concat(substring(intake_date_time,3,4),concat(substring(intake_date_time,1,2),substring(intake_date_time,11,9)))) AS TIMESTAMP) as intake_date_time")
// Writing
deltaTableInput1.write
.mode("overwrite")
.partitionBy("brand","model","year","month")
.format("delta")
.save("path")
错误:
com.google.common.util.concurrent.ExecutionError: java.lang.NoSuchMethodError: org.apache.spark.util.Utils$.classForName(Ljava/lang/String;)Ljava/lang/Class; 在 com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2261) 在 com.google.common.cache.LocalCache.get(LocalCache.java:4000) 在 com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4789) 在 org.apache.spark.sql.delta.DeltaLog$.apply(DeltaLog.scala:714) 在 org.apache.spark.sql.delta.DeltaLog$.forTable(DeltaLog.scala:676) 在 org.apache.spark.sql.delta.sources.DeltaDataSource.createRelation(DeltaDataSource.scala:124) 在 org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:46) 在 org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:71) 在 org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:69) 在 org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:87) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$execute$1(SparkPlan.scala:189) 在 org.apache.spark.sql.execution.SparkPlan.$anonfun$executeQuery$1(SparkPlan.scala:227) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:224) 在 org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:185) 在 org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:110) 在 org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:109) 在 org.apache.spark.sql.DataFrameWriter.$anonfun$runCommand$1(DataFrameWriter.scala:829) 在 org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$4(SQLExecution.scala:100) 在 org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:160) 在 org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:87) 在 org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:829) 在 org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:309) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:293) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:236) ... 47 省略 引起:java.lang.NoSuchMethodError: org.apache.spark.util.Utils$.classForName(Ljava/lang/String;)Ljava/lang/Class; 在 org.apache.spark.sql.delta.storage.LogStoreProvider.createLogStore(LogStore.scala:122) 在 org.apache.spark.sql.delta.storage.LogStoreProvider.createLogStore$(LogStore.scala:120) 在 org.apache.spark.sql.delta.DeltaLog.createLogStore(DeltaLog.scala:58) 在 org.apache.spark.sql.delta.storage.LogStoreProvider.createLogStore(LogStore.scala:117) 在 org.apache.spark.sql.delta.storage.LogStoreProvider.createLogStore$(LogStore.scala:115) 在 org.apache.spark.sql.delta.DeltaLog.createLogStore(DeltaLog.scala:58) 在 org.apache.spark.sql.delta.DeltaLog.(DeltaLog.scala:79) 在 org.apache.spark.sql.delta.DeltaLog$$anon$3.$anonfun$call$2(DeltaLog.scala:718) 在 org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.allowInvokingTransformsInAnalyzer(AnalysisHelper.scala:194) 在 org.apache.spark.sql.delta.DeltaLog$$anon$3.$anonfun$call$1(DeltaLog.scala:718) 在 com.databricks.spark.util.DatabricksLogging.recordOperation(DatabricksLogging.scala:77) 在 com.databricks.spark.util.DatabricksLogging.recordOperation$(DatabricksLogging.scala:67) 在 org.apache.spark.sql.delta.DeltaLog$.recordOperation(DeltaLog.scala:645) 在 org.apache.spark.sql.delta.metering.DeltaLogging.recordDeltaOperation(DeltaLogging.scala:103) 在 org.apache.spark.sql.delta.metering.DeltaLogging.recordDeltaOperation$(DeltaLogging.scala:89) 在 org.apache.spark.sql.delta.DeltaLog$.recordDeltaOperation(DeltaLog.scala:645) 在 org.apache.spark.sql.delta.DeltaLog$$anon$3.call(DeltaLog.scala:717) 在 org.apache.spark.sql.delta.DeltaLog$$anon$3.call(DeltaLog.scala:714) 在 com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4792) 在 com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) 在 com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) 在 com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) 在 com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257) ... 71 更多
在来自 REPL 的 Spark 2.4.4 中,它是在没有分区的情况下编写的。
Spark 3.0 错误
【问题讨论】:
-
你是如何执行代码的?通过
spark-submit还是通过java -jar?JAVA_HOME的值是多少? -
三角洲湖的版本是多少?这是 0.4.0 还是来自 master 的构建?
-
spark-shell,在 spark shell 中运行
-
编译组:'io.delta',名称:'delta-core_2.12',版本:'0.4.0' - delta 版本
-
由于 Spark 3.0 尚未发布,任何 3.0 预览版的 Delta 发生的任何事情都只能被视为一个错误,而不是 StackOverflow 上值得提问的问题。关闭它。