Slide 25
Slide 25 text
24
© NTT, Inc. 2026
from pyspark.sql import SparkSession
spark = (
SparkSession.builder.appName("ReadParquetSQL")
.config(
"spark.jars.packages",
",".join(["org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.1",
"org.apache.iceberg:iceberg-aws-bundle:1.8.1",]),)
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.catalog.iceberg1", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.iceberg1.type", "rest")
.config("spark.sql.catalog.iceberg1.uri", "http://gravitino-iceberg-rest:9001/iceberg/")
.config("spark.sql.catalog.iceberg1.io-impl", "org.apache.iceberg.aws.s3.S3FileIO")
.config("spark.sql.catalog.iceberg1.warehouse", "iceberg1")
.config("spark.sql.catalog.iceberg1.s3.endpoint", "http://minio1:9000")
.config("spark.sql.catalog.iceberg1.s3.access-key-id", AWS_ACCESS_KEY)
.config("spark.sql.catalog.iceberg1.s3.secret-access-key", AWS_SECRET_KEY)
.config("spark.sql.catalog.iceberg1.client.region", "us-east-1")
.config("spark.sql.catalog.iceberg1.s3.path-style-access", "true")
.config("spark.sql.catalog.iceberg2", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.iceberg2.type", "rest")
.config("spark.sql.catalog.iceberg2.uri", "http://gravitino-iceberg-rest:9001/iceberg/")
.config("spark.sql.catalog.iceberg2.io-impl", "org.apache.iceberg.aws.s3.S3FileIO")
.config("spark.sql.catalog.iceberg2.warehouse", "iceberg2")
.config("spark.sql.catalog.iceberg2.s3.endpoint", "http://minio2:9000")
.config("spark.sql.catalog.iceberg2.s3.access-key-id", AWS_ACCESS_KEY)
.config("spark.sql.catalog.iceberg2.s3.secret-access-key", AWS_SECRET_KEY)
.config("spark.sql.catalog.iceberg2.client.region", "us-east-1")
.config("spark.sql.catalog.iceberg2.s3.path-style-access", "true")
.getOrCreate()
)
Sparkからアクセス(Iceberg REST APIを利用する方法)
Spark上でのパッケージは
Iceberg利用時のものだけ
(Gravitino用のものが不要)
カタログのエンドポイントは
Gravitinoに
warehouseにはメタレイクに
登録した名前を設定する
+------+-----+
| name|stock|
+------+-----+
| apple| 30|
|banana| 120|
|orange| 45|
| grape| 80|
| melon| 12|
+------+-----+
実行結果
SELECT
p.name,
s.stock
FROM iceberg1.product.products p
JOIN iceberg2.warehouse.stocks s
ON p.product_id = s.product_id;