Search code examples
scalaapache-sparkhiveapache-spark-sqlorc

Error "Invalid call to qualifier on unresolved object" when trying to write a Spark DF into a Hive table


I am having the error "Invalid call to qualifier on unresolved object, tree: 'date1" when trying to write a specific Spark DataFrame into a Hive table.

I am using Spark 2.4.0, but also tested in Spark 2.4.3 with the same result.

I know how to avoid the error, but none of these methods are the expected solution because it modifies the table somehow:

  • Deleting 1 column from PARTITIONED BY in the create table code.
  • Moving the position of column text3 just after text2.
  • In the df, creating boolean1 column as a string type instead of boolean one (don't need to change the type in Hive table).
  • Deleting 1 of the columns in df and table (df and table must have the same number of columns):
    • Obviously, deleting date1 column as is the one given by the error message.
    • Deleting column text3.

Except deleting the date1 column, no other method makes sense to me. I don't understand why by applying any of those options it fixes the problem.

This is a Scala sample code in order to reproduce the error:

// Create a sample dataframe
import spark.implicits._
val df = Seq(("",
              "",
              false,
              "",
              "2019-07-01"))
    .toDF("text1",
          "text2",
          "boolean1",
          "text3",
          "date1")

// df schema:
df.printSchema
root
 |-- text1: string (nullable = true)
 |-- text2: string (nullable = true)
 |-- boolean1: boolean (nullable = false)
 |-- text3: string (nullable = true)
 |-- date1: string (nullable = true)

// Create the related hive table
spark.sql("drop table if exists table_sample")
spark.sql("""CREATE TABLE `table_sample` (
    `text1` STRING,
    `text2` STRING, 
    `boolean1` BOOLEAN, 
    `text3` STRING,
    `date1` DATE
    )
USING ORC
PARTITIONED BY (text1, text2)
""")

// Write the sample dataframe to the hive table
df.write
      .mode("overwrite")
      .format("orc")
      .insertInto("table_sample")

I expect the table can be created with no error and without needing to change the table schema (not renaming columns, changing columns types or moving columns into another position).

This is the full stacktrace:

org.apache.spark.sql.catalyst.analysis.UnresolvedException: Invalid call to qualifier on unresolved object, tree: 'trx_business_day_date
    at org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute.qualifier(unresolved.scala:107)
    at org.apache.spark.sql.catalyst.expressions.package$AttributeSeq$$anonfun$3.apply(package.scala:155)
    at org.apache.spark.sql.catalyst.expressions.package$AttributeSeq$$anonfun$3.apply(package.scala:155)
    at scala.collection.TraversableLike$$anonfun$filterImpl$1.apply(TraversableLike.scala:248)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
    at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
    at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
    at org.apache.spark.sql.catalyst.expressions.package$AttributeSeq.<init>(package.scala:155)
    at org.apache.spark.sql.catalyst.expressions.package$.AttributeSeq(package.scala:98)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.outputAttributes$lzycompute(LogicalPlan.scala:93)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.outputAttributes(LogicalPlan.scala:93)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolve(LogicalPlan.scala:113)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolve$1.apply(LogicalPlan.scala:81)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan$$anonfun$resolve$1.apply(LogicalPlan.scala:80)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.Iterator$class.foreach(Iterator.scala:893)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at org.apache.spark.sql.types.StructType.foreach(StructType.scala:99)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at org.apache.spark.sql.types.StructType.map(StructType.scala:99)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolve(LogicalPlan.scala:80)
    at org.apache.spark.sql.execution.datasources.DataSourceAnalysis$$anonfun$apply$1.applyOrElse(DataSourceStrategy.scala:198)
    at org.apache.spark.sql.execution.datasources.DataSourceAnalysis$$anonfun$apply$1.applyOrElse(DataSourceStrategy.scala:136)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$$anonfun$resolveOperatorsDown$1$$anonfun$2.apply(AnalysisHelper.scala:108)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$$anonfun$resolveOperatorsDown$1$$anonfun$2.apply(AnalysisHelper.scala:108)
    at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:77)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$$anonfun$resolveOperatorsDown$1.apply(AnalysisHelper.scala:107)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$$anonfun$resolveOperatorsDown$1.apply(AnalysisHelper.scala:106)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.allowInvokingTransformsInAnalyzer(AnalysisHelper.scala:194)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$class.resolveOperatorsDown(AnalysisHelper.scala:106)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveOperatorsDown(LogicalPlan.scala:29)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$class.resolveOperators(AnalysisHelper.scala:73)
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveOperators(LogicalPlan.scala:29)
    at org.apache.spark.sql.execution.datasources.DataSourceAnalysis.apply(DataSourceStrategy.scala:136)
    at org.apache.spark.sql.execution.datasources.DataSourceAnalysis.apply(DataSourceStrategy.scala:54)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:105)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:102)
    at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124)
    at scala.collection.immutable.List.foldLeft(List.scala:84)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:102)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:94)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:94)
    at org.apache.spark.sql.catalyst.analysis.Analyzer.org$apache$spark$sql$catalyst$analysis$Analyzer$$executeSameContext(Analyzer.scala:136)
    at org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:130)
    at org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:102)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$executeAndTrack$1.apply(RuleExecutor.scala:80)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$executeAndTrack$1.apply(RuleExecutor.scala:80)
    at org.apache.spark.sql.catalyst.QueryPlanningTracker$.withTracker(QueryPlanningTracker.scala:88)
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.executeAndTrack(RuleExecutor.scala:79)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$$anonfun$executeAndCheck$1.apply(Analyzer.scala:114)
    at org.apache.spark.sql.catalyst.analysis.Analyzer$$anonfun$executeAndCheck$1.apply(Analyzer.scala:113)
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.markInAnalyzer(AnalysisHelper.scala:201)
    at org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(Analyzer.scala:113)
    at org.apache.spark.sql.execution.QueryExecution$$anonfun$analyzed$1.apply(QueryExecution.scala:82)
    at org.apache.spark.sql.execution.QueryExecution$$anonfun$analyzed$1.apply(QueryExecution.scala:80)
    at org.apache.spark.sql.catalyst.QueryPlanningTracker.measurePhase(QueryPlanningTracker.scala:111)
    at org.apache.spark.sql.execution.QueryExecution.analyzed$lzycompute(QueryExecution.scala:80)
    at org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:80)
    at org.apache.spark.sql.execution.QueryExecution.org$apache$spark$sql$execution$QueryExecution$$output$1(QueryExecution.scala:249)
    at org.apache.spark.sql.execution.QueryExecution$$anonfun$3.apply(QueryExecution.scala:251)
    at org.apache.spark.sql.execution.QueryExecution$$anonfun$3.apply(QueryExecution.scala:251)
    at org.apache.spark.sql.execution.QueryExecution.stringOrError(QueryExecution.scala:144)
    at org.apache.spark.sql.execution.QueryExecution.toString(QueryExecution.scala:251)
    at org.apache.spark.sql.execution.SQLExecution$$anonfun$withCustomExecutionEnv$1.apply(SQLExecution.scala:90)
    at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:228)
    at org.apache.spark.sql.execution.SQLExecution$.withCustomExecutionEnv(SQLExecution.scala:85)
    at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:158)
    at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:690)
    at org.apache.spark.sql.DataFrameWriter.insertInto(DataFrameWriter.scala:339)
    at org.apache.spark.sql.DataFrameWriter.insertInto(DataFrameWriter.scala:325)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:9)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:134)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:136)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:138)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:140)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:142)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:144)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:146)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:148)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:150)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:152)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:154)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:156)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:158)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:160)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:162)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:164)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:166)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:168)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:170)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:172)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:174)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:176)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:178)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:180)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:182)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:184)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:186)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:188)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:190)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:192)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:194)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:196)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:198)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:200)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:202)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw$$iw.<init>(command-1106698602130938:204)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw$$iw.<init>(command-1106698602130938:206)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw$$iw.<init>(command-1106698602130938:208)
    at line694971ab74ea4d1382bf12d864e23292142.$read$$iw.<init>(command-1106698602130938:210)
    at line694971ab74ea4d1382bf12d864e23292142.$read.<init>(command-1106698602130938:212)
    at line694971ab74ea4d1382bf12d864e23292142.$read$.<init>(command-1106698602130938:216)
    at line694971ab74ea4d1382bf12d864e23292142.$read$.<clinit>(command-1106698602130938)
    at line694971ab74ea4d1382bf12d864e23292142.$eval$.$print$lzycompute(<notebook>:7)
    at line694971ab74ea4d1382bf12d864e23292142.$eval$.$print(<notebook>:6)
    at line694971ab74ea4d1382bf12d864e23292142.$eval.$print(<notebook>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:786)
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:1047)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:638)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest$$anonfun$loadAndRunReq$1.apply(IMain.scala:637)
    at scala.reflect.internal.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
    at scala.reflect.internal.util.AbstractFileClassLoader.asContext(AbstractFileClassLoader.scala:19)
    at scala.tools.nsc.interpreter.IMain$WrappedRequest.loadAndRunReq(IMain.scala:637)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:569)
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:565)
    at com.databricks.backend.daemon.driver.DriverILoop.execute(DriverILoop.scala:199)
    at com.databricks.backend.daemon.driver.ScalaDriverLocal$$anonfun$repl$1.apply$mcV$sp(ScalaDriverLocal.scala:189)
    at com.databricks.backend.daemon.driver.ScalaDriverLocal$$anonfun$repl$1.apply(ScalaDriverLocal.scala:189)
    at com.databricks.backend.daemon.driver.ScalaDriverLocal$$anonfun$repl$1.apply(ScalaDriverLocal.scala:189)
    at com.databricks.backend.daemon.driver.DriverLocal$TrapExitInternal$.trapExit(DriverLocal.scala:587)
    at com.databricks.backend.daemon.driver.DriverLocal$TrapExit$.apply(DriverLocal.scala:542)
    at com.databricks.backend.daemon.driver.ScalaDriverLocal.repl(ScalaDriverLocal.scala:189)
    at com.databricks.backend.daemon.driver.DriverLocal$$anonfun$execute$7.apply(DriverLocal.scala:324)
    at com.databricks.backend.daemon.driver.DriverLocal$$anonfun$execute$7.apply(DriverLocal.scala:304)
    at com.databricks.logging.UsageLogging$$anonfun$withAttributionContext$1.apply(UsageLogging.scala:235)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
    at com.databricks.logging.UsageLogging$class.withAttributionContext(UsageLogging.scala:230)
    at com.databricks.backend.daemon.driver.DriverLocal.withAttributionContext(DriverLocal.scala:45)
    at com.databricks.logging.UsageLogging$class.withAttributionTags(UsageLogging.scala:268)
    at com.databricks.backend.daemon.driver.DriverLocal.withAttributionTags(DriverLocal.scala:45)
    at com.databricks.backend.daemon.driver.DriverLocal.execute(DriverLocal.scala:304)
    at com.databricks.backend.daemon.driver.DriverWrapper$$anonfun$tryExecutingCommand$2.apply(DriverWrapper.scala:589)
    at com.databricks.backend.daemon.driver.DriverWrapper$$anonfun$tryExecutingCommand$2.apply(DriverWrapper.scala:589)
    at scala.util.Try$.apply(Try.scala:192)
    at com.databricks.backend.daemon.driver.DriverWrapper.tryExecutingCommand(DriverWrapper.scala:584)
    at com.databricks.backend.daemon.driver.DriverWrapper.getCommandOutputAndError(DriverWrapper.scala:475)
    at com.databricks.backend.daemon.driver.DriverWrapper.executeCommand(DriverWrapper.scala:542)
    at com.databricks.backend.daemon.driver.DriverWrapper.runInnerLoop(DriverWrapper.scala:381)
    at com.databricks.backend.daemon.driver.DriverWrapper.runInner(DriverWrapper.scala:328)
    at com.databricks.backend.daemon.driver.DriverWrapper.run(DriverWrapper.scala:215)
    at java.lang.Thread.run(Thread.java:748)

Anyone knows how can I fix the problem without changing the df/table schema? Can it be a Spark bug?

Thanks in advance!


Solution

  • Real issue is that your code is trying to insert boolean value 'false' in date1 column where date1 is 'Date' type.

    Solution for your problem will be moving the partitioned columns as last two columns in dataframe df. As spark's .insertInto() method treats last columns as partitioned columns. It will not match it on column names in dataframe instead it works on index based column mapping.

    Below df works perfectly without changing table structure.

    val df = Seq(( false,"","2019-07-01","", ""))
      .toDF(
        "boolean1", "text3", "date1", "text1", "text2")
    

    Query: "Show create table table_sample" resulted as

    CREATE TABLE `table_sample` (`boolean1` BOOLEAN, `text3` STRING, `date1` DATE, `text1` STRING, `text2` STRING)
    USING ORC
    OPTIONS (
    `serialization.format` '1'
    )
    PARTITIONED BY (text1, text2)
    

    So according to above table structure and your dataframe df the mapping done by spark will be:

    `boolean1` BOOLEAN = "" 
    `text3` STRING     = ""
    `date1` DATE       = false         --> Issue is this mapping
    `text1` STRING     = ""
    `text2` STRING     = "2019-07-01"
    

    It could be a Spark bug too as it should insert null in date field instead of throwing the error.