【发布时间】:2021-05-22 01:35:14
【问题描述】:
jdk 1.8 斯卡拉 2.12.11 火花 3.0.1 当我读取 hive 表并在 scala spark 中写入导出 orc 文件时
df.write.option("compression", "none").mode(SaveMode.Overwrite).orc(dump_path)
运行成功
当我想从 python pyspark 中的周期导出 orc 文件中读取 orc 文件时 运行成功
dfs = spark.read.orc("/Users/muller/Documents/gitcode/personEtl/knowledge_source_100.orc")
但是当我想从 scala spark 中的周期 orc 文件中读取相同的 orc 文件时遇到此错误
java.lang.ClassCastException: org.apache.orc.impl.ReaderImpl 不能转换为 java.io.Closeable java.lang.ClassCastException: org.apache.orc.impl.ReaderImpl 不能转换为 java.io.Closeable
at org.apache.spark.util.Utils$.tryWithResource(Utils.scala:2538)
at org.apache.spark.sql.execution.datasources.orc.OrcUtils$.readSchema(OrcUtils.scala:65)
at org.apache.spark.sql.execution.datasources.orc.OrcUtils$.$anonfun$readSchema$4(OrcUtils.scala:88)
at scala.collection.Iterator$$anon$10.next(Iterator.scala:461)
at scala.collection.TraversableOnce.collectFirst(TraversableOnce.scala:172)
at scala.collection.TraversableOnce.collectFirst$(TraversableOnce.scala:159)
at scala.collection.AbstractIterator.collectFirst(Iterator.scala:1431)
at org.apache.spark.sql.execution.datasources.orc.OrcUtils$.readSchema(OrcUtils.scala:88)
at org.apache.spark.sql.execution.datasources.orc.OrcUtils$.inferSchema(OrcUtils.scala:128)
at org.apache.spark.sql.execution.datasources.orc.OrcFileFormat.inferSchema(OrcFileFormat.scala:96)
at org.apache.spark.sql.execution.datasources.DataSource.$anonfun$getOrInferFileFormatSchema$11(DataSource.scala:198)
at scala.Option.orElse(Option.scala:447)
at org.apache.spark.sql.execution.datasources.DataSource.getOrInferFileFormatSchema(DataSource.scala:195)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:408)
【问题讨论】:
-
在scala spark中像这样读取orc文件
-
def loadORCByOne(path:String):DataFrame={ val spark :SparkSession = SparkSession.builder().appName("sess").master("local[*]").getOrCreate() val df = spark.read.orc(path) df }
-
在读取 parquet 文件时也遇到同样的错误
标签: scala apache-spark hive orc