我想从本地环境中的 pyspark 代码读取 AWS 数据目录表(Iceberg 和 Non-Iceberg)中的数据。 我已经相应地配置了 SparkSession。虽然我可以从本地访问 Iceberg 表,但非 Iceberg 表没有显示。 我使用了以下 SparkSession 配置:
spark = SparkSession.builder.config("spark.hadoop.fs.s3a.access.key", os.getenv('AWS_ACCESS_KEY_ID')) \
.config("spark.hadoop.fs.s3a.secret.key", os.getenv('AWS_SECRET_ACCESS_KEY')) \
.config("spark.hadoop.fs.s3a.session.token", os.getenv('AWS_SESSION_TOKEN')) \
.config("spark.hadoop.fs.s3a.endpoint", f"s3.{os.getenv('AWS_REGION')}.amazonaws.com") \
.config("spark.hadoop.fs.s3a.region", os.getenv('AWS_REGION')) \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.0,org.apache.hadoop:hadoop-aws:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.11.874,software.amazon.awssdk:bundle:2.27.2,software.amazon.awssdk:metrics-spi:2.27.2,software.amazon.awssdk:s3:2.27.2,software.amazon.awssdk:glue:2.27.2") \
.config('spark.sql.catalog.glue_catalog', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.glue_catalog.catalog-impl', 'org.apache.iceberg.aws.glue.GlueCatalog') \
.config('spark.sql.iceberg.handle-timestamp-without-timezone', 'true') \
.config('spark.sql.catalog.glue_catalog.warehouse', 's3://glue/datalake/') \
.config('spark.sql.extensions','org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions')\
.config('spark.sql.catalog.glue_catalog.io-impl', 'org.apache.iceberg.aws.s3.S3FileIO') \
.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
.config("spark.hadoop.fs.defaultFS", "s3://glue") \
.enableHiveSupport() \
.getOrCreate()
对于非 Iceberg 表,我收到以下错误: [TABLE_OR_VIEW_NOT_FOUND]。
如果您能调查一下并帮助解决问题。
我希望能够在本地环境中使用相同的 Spark 会话访问 Iceberg 和非 Iceberg 目录表。