Delta Lake表PySpark/Glue目录EMR

xcitsw88  于 9个月前  发布在  Spark
关注(0)|答案(1)|浏览(79)

使用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目录中注册,仍然必须提供路径?
我错过了什么?

baubqpgj

baubqpgj1#

我相信您在spark会话中缺少以下配置:

"spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"

字符串
我已经使用以下配置初始化了我的spark会话,并且能够使用spark.sql进行查询:

"conf": {
    "spark.sql.extensions" : "io.delta.sql.DeltaSparkSessionExtension",
    "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
    "spark.jars": "/usr/share/aws/delta/lib/delta-core.jar,/usr/share/aws/delta/lib/delta-storage.jar,/usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar",
    "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
}


结果:

spark.sql("select * from mydb.delta_table;").show()

+---+-------------+--------------------+
| id|creation_date|    last_update_time|
+---+-------------+--------------------+
|102|   2015-01-01|2015-01-01T13:51:...|
|101|   2015-01-01|2015-01-01T12:14:...|
|103|   2015-01-01|2015-01-01T13:51:...|
|100|   2015-01-01|2015-01-01T13:51:...|
+---+-------------+--------------------+

相关问题