我正在开发一个Spark项目,当我尝试使用java加载此文件时,我有一个采用镶木地板格式的文件,它给出了以下错误。但是,当我使用相同的路径在hive中加载相同的文件并从table_name中编写查询select *时,所以它的工作正常和数据也正在进行中。请帮我解决这个问题。
java.io.IOException:无法读取页脚: java.lang.RuntimeException:损坏的文件:页脚索引不是 在文件内 org.apache.parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:247) 在 org.apache.spark.sql.execution.datasources.parquet.ParquetRelation $$ anonfun $ 28.apply(ParquetRelation.scala:754) 在 org.apache.spark.sql.execution.datasources.parquet.ParquetRelation $$ anonfun $ 28.apply(ParquetRelation.scala:743) 在 org.apache.spark.rdd.RDD $$ anonfun $ mapPartitions $ 1 $$ anonfun $ $申请17.apply(RDD.scala:710) 在 org.apache.spark.rdd.RDD $$ anonfun $ mapPartitions $ 1 $$ anonfun $ $申请17.apply(RDD.scala:710) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300) 在org.apache.spark.rdd.RDD.iterator(RDD.scala:264)at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)at at org.apache.spark.scheduler.Task.run(Task.scala:88)at org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:214) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:745)引起: java.lang.RuntimeException:损坏的文件:页脚索引不是 在文件内 org.apache.parquet.hadoop.ParquetFileReader.readFooter(ParquetFileReader.java:427) 在 org.apache.parquet.hadoop.ParquetFileReader $ 2.call(ParquetFileReader.java:237) 在 org.apache.parquet.hadoop.ParquetFileReader $ 2.call(ParquetFileReader.java:233) 在java.util.concurrent.FutureTask.run(FutureTask.java:262)
答案 0 :(得分:-4)
You can try below options
1) sqlContext.read.parquet("path")
2) sqlContext.read.format(fileFormat)
.option("header", header) // Use first line of all files as header
.option("inferSchema", inferSchema) // Automatically infer data types
.load(source)
If your issue didn't resolved, please post the sample of code.