我想把二进制格式的拼花文件转换成csv文件。我正在使用以下命令的火花。
sqlContext.setConf("spark.sql.parquet.binaryAsString","true")
val source = sqlContext.read.parquet("path to parquet file")
source.coalesce(1).write.format("com.databricks.spark.csv").option("header","true").save("path to csv")
当我在HDFS服务器中启动spark并运行这些命令时,这是可行的。当我尝试将相同的拼板文件复制到我的本地系统并启动pyspark并运行这些命令时,就会产生错误。
我能够将二进制文件设置为string属性为true,并能够读取本地pyspark中的parquet文件。但是,当我执行写入csv的命令时,它会出现以下错误。
2018-10-01 14:45:11警告ZlibFactory:51 -未能加载/初始化本机zlib库2018-10-01 14:45:12错误Utils:91 -中止任务java.lang.UnsupportedOperationException:不支持的编码: org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readPageV2(VectorizedColumnReader.java: at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readPageV2(VectorizedColumnReader.java:的DELTA_BYTE_ARRAY627)在org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.access$100(VectorizedColumnReader.java:47) at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader$1.visit(VectorizedColumnReader.java:550) at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader$1.visit(VectorizedColumnReader.java:536) at org.apache.parquet.column.page.DataPageV2.accept(DataPageV2.java:141)在org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readPage(VectorizedColumnReader.java:536) at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readBatch(VectorizedColumnReader.java:164) at org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextBatch(VectorizedParquetRecordReader.java:263) at org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue(VectorizedParquetRecordReader.java:161)在org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext(RecordReaderIterator.scala:39) at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:109) at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.nextIterator(FileScanRDD.scala:186) at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:109)
应该做些什么来解决本地机器中与hdfs相同的错误?解决这个问题的任何想法都会有很大帮助。谢谢。
发布于 2020-06-15 08:12:02
问题:在Spark2.x读取部分列被DELTA_BYTE_ARRAY编码的拼板文件中获得异常。
异常: java.lang.UnsupportedOperationException:不支持编码: DELTA_BYTE_ARRAY
解决方案:如果关闭向量化读取器属性,则读取这些文件可以正常工作。
spark.conf.set("spark.sql.parquet.enableVectorizedReader", "false")
解释:这些文件是使用Parquet V2编写器编写的,因为增量字节数组编码是Parquet v2特性。Spark2.x矢量化读取器似乎不支持这种格式。已在apache的jira上创建的问题。来解决这个特殊的问题。
使用该解决方案。矢量化查询执行对于Hive、this和Presto等引擎可能有很大的性能改进。向量化查询执行不是一次处理一行,而是通过一次处理一批行来简化操作。但是spark 2.x并不支持第二版的这个特性,所以我们需要依赖这个解决方案,直到更多的版本发布。
发布于 2018-12-04 02:51:12
您可以尝试禁用VectorizedReader。
spark.conf.set("spark.sql.parquet.enableVectorizedReader", "false")
这不是一个解决办法,但它是一个解决办法。禁用它的后果将是https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-vectorized-parquet-reader.html
https://stackoverflow.com/questions/52588408
复制相似问题