使用Spark创建带有location参数指向s3存储桶路径的数据库,使用saveAsTable创建数据库并写入增量,数据库和表都显示在指向s3位置的粘合点中。然后当我使用spark.sql(‘select * from mydb.tbl’)
读取时,我得到Table不支持读取:但是当使用spark.read.format(‘delta’).load(‘s3 path’)
数据返回时,我怎么能从glue catalog查询那个delta表而不提供s3路径呢?我认为元数据数据库存储这些信息,就像数据文件在哪里一样。
设置。EMR 6.15.0 Hadoop 3.3.6,Hive 3.1.4,MytermosaGateway 2.6.0,Spark 3.4.1,Livy 0.7.1
节点通过以下分类进行配置:spark-hive-site:hive.metastore.client.factory.class:com.amazonaws.glue.catalog.metastore. AWSG节点DataCatalogHiveClientFactory
delta-defaults:delta.enabled:true
代码摘要:spark = SparkSession.build.config(‘spark.jars’, ‘/usr/share/aws/delta/lib/delta-core_2.12-2.4.0.jar’).config(‘spark.sql.extension’, ‘io.delta.sql.DeltaSparkSessionExtension’).config(‘spark.sql.catalog.spark_catalog’, ‘org.apache.spark.sql.delta.catalog.DeltaCatalog’).enableHiveSupport().getOrCreate()
个spark.sql(“create database mydb LOCATION ‘s3://bucket_name/mydb’”)
个df.write.format(‘delta’).mode(‘overwrote’).saveAsTable(‘tbl’)
个
此时,表和所有增量填充文件夹都保存到创建数据库行存储桶中指定的s3中,并在mydb/下使用新路径
spark.sql(‘select * from mydb.tbl’)
字符串
返回表不支持读取
spark.read.format('delta').load('path')或DeltaTable.forPath(spark,'path')是否是查询delta表的唯一方法,即使它在glue目录中注册,仍然必须提供路径?
我错过了什么?
1条答案
按热度按时间baubqpgj1#
我相信您在spark会话中缺少以下配置:
字符串
我已经使用以下配置初始化了我的spark会话,并且能够使用
spark.sql
进行查询:型
结果:
型