AWSSpark SQL ジョブの Glue データカタログのSupport - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWSSpark SQL ジョブの Glue データカタログのSupport

-AWSGlue データカタログは Apache Hive メタストア互換カタログです。以下の設定が可能です。AWSデータカタログを外部の Apache Hive メタストアとして使用するために、ジョブと開発エンドポイントをGlue します。その後、データカタログに格納されているテーブルに対して Apache Spark SQL クエリを直接実行できます。AWSダイナミックフレームのGlue は、既定でデータカタログと統合されます。ただし、この機能を使用すると、Spark SQL ジョブは、外部の Hive メタストアとしてデータカタログの使用を開始できます。

設定することができますAWSジョブと開発エンドポイントをGlue するには、"--enable-glue-datacatalog": ""ジョブ引数と開発エンドポイント引数にそれぞれ引数を。この引数を渡すと、Spark で外部の Hive メタストアとしてデータカタログにアクセスできるようにする特定の設定が設定されます。それもHive のサポートを有効にします()SparkSessionで作成されたAWSジョブまたは開発エンドポイントGlue します。

データカタログアクセスを有効にするには、を使用するAWSGlue データカタログを Hive メタストアとしての] チェックボックスをオンにします。カタログオプション] グループでジョブの追加またはエンドポイントの追加コンソールの [ ジョブまたは開発エンドポイントに使用される IAM ロールには glue:CreateDatabase アクセス許可が必要です。と呼ばれるデータベース」default「が存在しない場合、データカタログ内に作成されます。

Spark SQL ジョブでこの機能の使用方法の例を見てみましょう。次の例では、s3://awsglue-datasets/examples/us-legislators にある米国国会議員のデータセットをクロールしたと想定しています。

で定義されたテーブルからデータをシリアル化/逆シリアル化するにはAWSGlue データカタログ、スパークSQLはハイブ SerDeで定義されている形式のAWSスパークジョブのクラスパスにデータカタログをGlue します。

特定の一般的なフォーマットの SerDes はAWSGlue. 以下は Amazon S3 リンクです。

JSON SerDe を追加の JAR として開発エンドポイントに追加します。ジョブでは、引数フィールドで --extra-jars 引数を使用して SerDe を追加できます。詳細については、「で使用される特別なパラメータAWS接着語」を参照してください。

Spark SQL 用にデータカタログを有効にして開発エンドポイントを作成するための入力 JSON の例を次に示します。

{ "EndpointName": "Name", "RoleArn": "role_ARN", "PublicKey": "public_key_contents", "NumberOfNodes": 2, "Arguments": { "--enable-glue-datacatalog": "" }, "ExtraJarsS3Path": "s3://crawler-public/json/serde/json-serde.jar" }

Spark SQL を使用して、米国国会議員のデータセットから作成されたテーブルにクエリを実行します。

>>> spark.sql("use legislators") DataFrame[] >>> spark.sql("show tables").show() +-----------+------------------+-----------+ | database| tableName|isTemporary| +-----------+------------------+-----------+ |legislators| areas_json| false| |legislators| countries_json| false| |legislators| events_json| false| |legislators| memberships_json| false| |legislators|organizations_json| false| |legislators| persons_json| false| +-----------+------------------+-----------+ >>> spark.sql("describe memberships_json").show() +--------------------+---------+-----------------+ | col_name|data_type| comment| +--------------------+---------+-----------------+ | area_id| string|from deserializer| | on_behalf_of_id| string|from deserializer| | organization_id| string|from deserializer| | role| string|from deserializer| | person_id| string|from deserializer| |legislative_perio...| string|from deserializer| | start_date| string|from deserializer| | end_date| string|from deserializer| +--------------------+---------+-----------------+

形式の SerDe クラスがジョブのクラスパスで使用できない場合は、以下に示すようなエラーが表示されます。

>>> spark.sql("describe memberships_json").show() Caused by: MetaException(message:java.lang.ClassNotFoundException Class org.openx.data.jsonserde.JsonSerDe not found) at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:399) at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276) ... 64 more

別個のorganization_idsからmembershipsテーブルで、次の SQL クエリを実行します。

>>> spark.sql("select distinct organization_id from memberships_json").show() +--------------------+ | organization_id| +--------------------+ |d56acebe-8fdc-47b...| |8fa6c3d2-71dc-478...| +--------------------+

動的フレームで同じ手順を実行する必要がある場合は、以下を実行してください。

>>> memberships = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="memberships_json") >>> memberships.toDF().createOrReplaceTempView("memberships") >>> spark.sql("select distinct organization_id from memberships").show() +--------------------+ | organization_id| +--------------------+ |d56acebe-8fdc-47b...| |8fa6c3d2-71dc-478...| +--------------------+

DynamicFrames は ETL オペレーション用に最適化されていますが、Spark SQL がデータカタログに直接アクセスできるようにすると、複雑な SQL ステートメントを実行したり、既存のアプリケーションを移植するための簡潔な方法が得られます。