我想读取Parquet文件,因为是使用Spark和过程中每个文件的内容一个接一个。我试图用以下方法来实现它
spark.read
.option("wholetext", "true")
.option("compression", "none")
.textFile("/test/part-00001-d3a107e9-ead6-45f0-bccf-fadcecae45bb-c000.zstd.parquet")
也尝试了许多不同的类似方法,但Spark似乎以某种方式修改了文件内容,因为在阅读它时可能添加了一些选项。
我的最终目标是使用Scala中的okhttp客户端在Clickhouse中加载这些文件。我试图加载的文件没有损坏,Clickhouse在Spark中未使用时成功处理了它。然而,当我尝试使用spark和以下方法时,Clickhouse响应std::exception. Code: 1001, type: parquet::ParquetException, e.what() = Couldn't deserialize thrift: TProtocolException: Invalid data
当我尝试打印出从文件中读取的内容时,我看到了以下内容
Europe/Moscoworg.apache.spark.version3.4.1)org.apache.spark.sql.parquet.row.metadata�{"type":"struct","fields":[{"name":"field1","type":"integer","nullable":true,"metadata":{}},{"name":"field2","type":{"type":"array","elementType":"integer","containsNull":true},"nullable":true,"metadata":{}},{"name":"field3","type":{"type":"struct","fields":[{"name":"x","type":"integer","nullable":true,"metadata":{}},{"name":"y","type":"integer","nullable":true,"metadata":{}}]},"nullable":true,"metadata":{}}]}org.apache.spark.legacyDateTimeJparquet-mr version 1.12.3 (build f8dced182c4c1fbdec6ccb3185537b5a01e6ed6b)L^PAR1
看起来里面没有任何数据,似乎只有元数据。
我的问题是如何使用Spark以字符串格式读取parquet文件。
1条答案
按热度按时间nlejzf6q1#
如果您尝试使用spark.sparkContext.binaryFiles(BinaryFiles代码)会怎样?
另一种方法是使用Javas nio API: