首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ColumnarBatch DataSource失败,并显示下推列

ColumnarBatch DataSource失败,并显示下推列
EN

Stack Overflow用户
提问于 2018-08-07 01:29:00
回答 2查看 374关注 0票数 1

我正在编写一个实现SupportsScanColumnarBatch、SupportsPushDownFilters和SupportsPushDownRequiredColumns的DataSource。

在使用与pruneColumns覆盖中提供的requiredSchema长度相同数量的ColumnVectors填充ColumnarBatch后,我在Spark内部得到了一个ArrayIndexOutOfBoundsException。

我怀疑Spark正在寻找与readSchema override返回的列模式一样多的ColumnVectors,而不是使用pruneColumns提供的模式。

执行"select * from dft“可以很好地工作,因为模式长度是相同的--在我的测试用例中是15列。任何较小的值(例如,"select col1,col2 from dft")都会返回下面的堆栈跟踪,很明显,Spark正在寻找更多的列。

代码语言:javascript
运行
复制
java.lang.ArrayIndexOutOfBoundsException: 2
at org.apache.spark.sql.vectorized.ColumnarBatch.column(ColumnarBatch.java:98)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.datasourcev2scan_nextBatch_0$(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$10$$anon$1.hasNext(WholeStageCodegenExec.scala:614)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:253)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:247)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:109)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

有什么线索可以帮我解决这个问题吗?目前,为了让程序继续运行,我忽略了pruneColumns调用并返回所有内容。

EN

Stack Overflow用户

发布于 2018-08-10 19:46:11

找到了一种更明智的方法。

在您的SupportsPushDownRequiredColumns实现中,让readSchema()方法返回与您在pruneColumns()调用中获得的相同的StructType

基本上就是反馈你从Spark得到的东西!

HTH

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51712834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档