You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Ryan Blue (JIRA)" <ji...@apache.org> on 2019/06/05 19:09:00 UTC

[jira] [Created] (SPARK-27960) DataSourceV2 ORC implementation doesn't handle schemas correctly

Ryan Blue created SPARK-27960:
---------------------------------

             Summary: DataSourceV2 ORC implementation doesn't handle schemas correctly
                 Key: SPARK-27960
                 URL: https://issues.apache.org/jira/browse/SPARK-27960
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 2.4.3
            Reporter: Ryan Blue


While testing SPARK-27919 (#[24768|https://github.com/apache/spark/pull/24768]), I tried to use the v2 ORC implementation to validate a v2 catalog that delegates to the session catalog. The ORC implementation fails the following test case because it cannot infer a schema (there is no data) but it should be using the schema used to create the table.

 Test case:
{code}
test("CreateTable: test ORC source") {
  spark.conf.set("spark.sql.catalog.session", classOf[V2SessionCatalog].getName)

  spark.sql(s"CREATE TABLE table_name (id bigint, data string) USING $orc2")

  val testCatalog = spark.catalog("session").asTableCatalog
  val table = testCatalog.loadTable(Identifier.of(Array(), "table_name"))

  assert(table.name == "orc ") // <-- should this be table_name?
  assert(table.partitioning.isEmpty)
  assert(table.properties == Map(
    "provider" -> orc2,
    "database" -> "default",
    "table" -> "table_name").asJava)
  assert(table.schema == new StructType().add("id", LongType).add("data", StringType)) // <-- fail

  val rdd = spark.sparkContext.parallelize(table.asInstanceOf[InMemoryTable].rows)
  checkAnswer(spark.internalCreateDataFrame(rdd, table.schema), Seq.empty)
}
{code}

Error:
{code}
Unable to infer schema for ORC. It must be specified manually.;
org.apache.spark.sql.AnalysisException: Unable to infer schema for ORC. It must be specified manually.;
	at org.apache.spark.sql.execution.datasources.v2.FileTable.$anonfun$dataSchema$5(FileTable.scala:61)
	at scala.Option.getOrElse(Option.scala:138)
	at org.apache.spark.sql.execution.datasources.v2.FileTable.dataSchema$lzycompute(FileTable.scala:61)
	at org.apache.spark.sql.execution.datasources.v2.FileTable.dataSchema(FileTable.scala:54)
	at org.apache.spark.sql.execution.datasources.v2.FileTable.schema$lzycompute(FileTable.scala:67)
	at org.apache.spark.sql.execution.datasources.v2.FileTable.schema(FileTable.scala:65)
	at org.apache.spark.sql.sources.v2.DataSourceV2SQLSuite.$anonfun$new$5(DataSourceV2SQLSuite.scala:82)
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org