avro格式定义如下图:
然后spark正常读取生成的parquet则报错:Illegal Parquet type: FIXED_LEN_BYTE_ARRAY。问怎么读取parquet(不一定要用spark)?详细错误如下:
org.apache.spark.sql.AnalysisException: Illegal Parquet type: FIXED_LEN_BYTE_ARRAY;
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.illegalType$1(ParquetSchemaConverter.scala:107)
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.convertPrimitiveField(ParquetSchemaConverter.scala:175)
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.convertField(ParquetSchemaConverter.scala:89)
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.$anonfun$convert$1(ParquetSchemaConverter.scala:71)
at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:237)
at scala.collection.Iterator.foreach(Iterator.scala:941)
at scala.collection.Iterator.foreach$(Iterator.scala:941)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1429)
at scala.collection.IterableLike.foreach(IterableLike.scala:74)
at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
at scala.collection.TraversableLike.map(TraversableLike.scala:237)
at scala.collection.TraversableLike.map$(TraversableLike.scala:230)
at scala.collection.AbstractTraversable.map(Traversable.scala:108)
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.convert(ParquetSchemaConverter.scala:65)
at org.apache.spark.sql.execution.datasources.parquet.ParquetToSparkSchemaConverter.convert(ParquetSchemaConverter.scala:62)
at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.$anonfun$readSchemaFromFooter$2(ParquetFileFormat.scala:664)
at scala.Option.getOrElse(Option.scala:138)
at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.readSchemaFromFooter(ParquetFileFormat.scala:664)
at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.$anonfun$mergeSchemasInParallel$2(ParquetFileFormat.scala:621)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitions$2(RDD.scala:801)
at org.apache.spark.rdd.RDD.$anonfun$mapPartitions$2$adapted(RDD.scala:801)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
spark读取avro序列化的parquet时报错:Illegal Parquet type: FIXED_LEN_BYTE_ARRAY
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 大大怪打LZR 2023-08-13 21:49关注
根据您提供的错误信息,似乎问题出在Parquet文件的数据类型不匹配上。Parquet文件中的数据类型与读取器(例如Spark)期望的数据类型不一致。
根据您的问题描述,您的Avro架构定义中可能使用了
FIXED
数据类型,而这在Parquet文件中通常对应于FIXED_LEN_BYTE_ARRAY
类型。然而,Spark 默认情况下可能不支持直接将 Parquet 文件中的FIXED_LEN_BYTE_ARRAY
数据类型映射到 Spark 数据类型。为了解决这个问题,您可以考虑以下几种方法:
自定义Schema映射: 尝试使用自定义的Schema映射来将 Parquet 文件中的
FIXED_LEN_BYTE_ARRAY
数据类型转换为Spark支持的数据类型。您可以通过在读取Parquet文件时提供一个自定义的Schema来实现这一点。升级Spark版本: 有时候问题可能是特定版本的Spark引起的,尝试升级到较新的Spark版本可能会解决某些问题,因为Spark不断在版本中改进Parquet读写支持。
数据转换: 在读取Parquet文件之前,将其转换为适合Spark的数据格式,例如CSV或JSON。然后,您可以使用Spark读取这些转换后的文件。
Parquet工具: 使用Parquet文件的命令行工具,例如Apache Parquet Tools,可以提供关于Parquet文件的更多信息,有时可以揭示出数据类型不匹配的问题。
最好的方法可能会取决于您的具体情况。您还可以根据具体的Avro架构和Parquet文件内容,尝试调整Schema映射或转换数据格式以解决问题。
解决 无用评论 打赏 举报
悬赏问题
- ¥35 平滑拟合曲线该如何生成
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 自己瞎改改,结果现在又运行不了了
- ¥15 链式存储应该如何解决
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站