You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by "Ethan Guo (Jira)" <ji...@apache.org> on 2022/04/21 02:24:00 UTC

[jira] [Closed] (HUDI-3937) Fix NoSuchElementException with nest field as preCombine key in MOR

     [ https://issues.apache.org/jira/browse/HUDI-3937?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ethan Guo closed HUDI-3937.
---------------------------
    Resolution: Duplicate

> Fix NoSuchElementException with nest field as preCombine key in MOR
> -------------------------------------------------------------------
>
>                 Key: HUDI-3937
>                 URL: https://issues.apache.org/jira/browse/HUDI-3937
>             Project: Apache Hudi
>          Issue Type: Task
>            Reporter: Ethan Guo
>            Priority: Blocker
>             Fix For: 0.11.0
>
>
> For MOR table, when using a nested field as precombined key, when querying the table after upserts, the following exception is thrown:
> {code:java}
> java.util.NoSuchElementException: key not found: fare.currency      at scala.collection.MapLike$class.default(MapLike.scala:228)
>       at scala.collection.AbstractMap.default(Map.scala:59)
>       at scala.collection.MapLike$class.apply(MapLike.scala:141)
>       at scala.collection.AbstractMap.apply(Map.scala:59)
>       at org.apache.hudi.HoodieSparkUtils$$anonfun$8.apply(HoodieSparkUtils.scala:325)
>       at org.apache.hudi.HoodieSparkUtils$$anonfun$8.apply(HoodieSparkUtils.scala:325)
>       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.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
>       at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
>       at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
>       at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
>       at org.apache.hudi.HoodieSparkUtils$.getRequiredSchema(HoodieSparkUtils.scala:325)
>       at org.apache.hudi.HoodieBaseRelation.buildScan(HoodieBaseRelation.scala:224)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy$$anonfun$10.apply(DataSourceStrategy.scala:293)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy$$anonfun$10.apply(DataSourceStrategy.scala:293)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy$$anonfun$pruneFilterProject$1.apply(DataSourceStrategy.scala:326)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy$$anonfun$pruneFilterProject$1.apply(DataSourceStrategy.scala:325)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy.pruneFilterProjectRaw(DataSourceStrategy.scala:381)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy.pruneFilterProject(DataSourceStrategy.scala:321)
>       at org.apache.spark.sql.execution.datasources.DataSourceStrategy.apply(DataSourceStrategy.scala:289)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:63)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:63)
>       at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:435)
>       at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:441)
>       at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:93)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$2$$anonfun$apply$2.apply(QueryPlanner.scala:78)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$2$$anonfun$apply$2.apply(QueryPlanner.scala:75)
>       at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:157)
>       at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:157)
>       at scala.collection.Iterator$class.foreach(Iterator.scala:891)
>       at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
>       at scala.collection.TraversableOnce$class.foldLeft(TraversableOnce.scala:157)
>       at scala.collection.AbstractIterator.foldLeft(Iterator.scala:1334)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$2.apply(QueryPlanner.scala:75)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$2.apply(QueryPlanner.scala:67)
>       at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:435)
>       at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:441)
>       at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:93)
>       at org.apache.spark.sql.execution.QueryExecution.sparkPlan$lzycompute(QueryExecution.scala:72)
>       at org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:68)
>       at org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:77)
>       at org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:77)
>       at org.apache.spark.sql.Dataset.withAction(Dataset.scala:3365)
>       at org.apache.spark.sql.Dataset.head(Dataset.scala:2550)
>       at org.apache.spark.sql.Dataset.take(Dataset.scala:2764)
>       at org.apache.spark.sql.Dataset.getRows(Dataset.scala:254)
>       at org.apache.spark.sql.Dataset.showString(Dataset.scala:291)
>       at org.apache.spark.sql.Dataset.show(Dataset.scala:751)
>       at org.apache.spark.sql.Dataset.show(Dataset.scala:710)
>       at org.apache.spark.sql.Dataset.show(Dataset.scala:719) {code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)