問題
方法中的說明創建了一個外部表,並將其與Delta Lake集成馬上和雅典娜到三角洲湖整合文檔。
Athena中的外部表是在Apache Hive metastore中定義的。
您從Athena查詢編輯器運行一個外部表上的選擇查詢,它返回一個HIVE_CURSOR_ERROR.
HIVE_CURSOR_ERROR: cannot read value at 0 in block 0 in file s3://
導致
問題的根本原因是Hive和Apache Spark中使用了不同的Parquet約定。
在Spark 1.4或以上版本中,使用當前的Parquet格式,十進製值被寫入整數。在Parquet格式的早期版本中,十進製值以Apache的定長字節數組格式寫入。其他Apache係統(如Hive和Apache Impala)也使用這種Parquet格式。
因此,當由於使用兩種Parquet格式而導致數據類型的內部表示不同時,您將收到一個錯誤。
解決方案
如果使用Athena或Presto訪問Delta Lake托管表,Parquet文件必須以與Hive兼容的格式創建。
你不能在Hive中選擇Parquet約定,但是你可以在Spark中這樣做。
設置spark.conf.set(“spark.sql.parquet.writeLegacyFormat”,真的)屬性,以解決該問題。
設置集群級別的屬性。
- 編輯集群屬性。
- 點擊高級選項.
- 選擇火花.
- 中輸入屬性設置火花配置字段。
- 確認更改。
- 重新啟動集群。
請參閱劇場正廳座位配置文檔獲取更多信息。