Apache spark 无法转换拼花地板列:应为十进制,找到的是二进制

Apache spark 无法转换拼花地板列:应为十进制,找到的是二进制,apache-spark,apache-nifi,parquet,Apache Spark,Apache Nifi,Parquet,我正在使用ApacheNIFI 1.9.2将数据从关系数据库加载到Google云存储中。目的是将结果写入拼花文件,因为它以柱状方式存储数据。为了实现这一点,我在Nifi中使用ConvertAvroToParquet(默认设置)处理器(后面是PutGCSObject处理器)。这些结果文件的问题在于,在使用Spark 2.4.0(scala 2.11.12)中的文件时,我无法读取十进制类型的列:无法转换拼花地板列。。。列:[ARHG3A],应为十进制(2,0),应为二进制 指向拼花地板/avro示例

我正在使用ApacheNIFI 1.9.2将数据从关系数据库加载到Google云存储中。目的是将结果写入拼花文件,因为它以柱状方式存储数据。为了实现这一点,我在Nifi中使用ConvertAvroToParquet(默认设置)处理器(后面是PutGCSObject处理器)。这些结果文件的问题在于,在使用Spark 2.4.0(scala 2.11.12)中的文件时,我无法读取十进制类型的列:无法转换拼花地板列。。。列:[ARHG3A],应为十进制(2,0),应为二进制

指向拼花地板/avro示例文件的链接:

据我所知,Nifi在flowfile中的处理器之间使用Avro格式,我还编写了Avro文件(就像它就在ConvertAvroToParquet处理器之前),我可以在Spark中读取它。 在Avro中也可以不使用逻辑类型,但最后我会丢失列类型,所有列都是字符串(不是首选)。 我也尝试过拼花地板处理器,但没有成功

val arhg_parquet=spark.read.format(“parquet”).load(“arhg.parquet”)
arhg_拼花地板.printSchema()
arhg_拼花地板展示(10,假)
printSchema()给出正确的结果,表明ARHG3A是十进制(2,0) 执行show(10,false)会导致错误:无法在文件中转换拼花地板列file:///C:/ARHG.parquet. 列:[ARHG3A],应为十进制(2,0),应为二进制

为了实现这一点,我在Nifi中使用ConvertAvroToParquet(默认设置)处理器(后面是PutGCSObject处理器)


尝试升级到NiFi 1.12.1,这是我们的最新版本。对可能适用于此处的小数处理进行了一些改进。此外,从~1.10.0开始,您还可以使用拼花读取器和书写器服务将Avro转换为拼花。如果这不起作用,可能是一个bug,应该对其提交Jira罚单。

这个问题涉及多个工具(nifi、spark,甚至s3),其中包括几个步骤。请尽量缩小范围(最好提供一个可指责的例子),以便其他人更容易提供帮助