pn4649
@pn4649

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

関数について教えてください。

Q&A

Closed

python、プログラミング初心者です。

AWSのソースコードを読んでいった際に、
「.option()」と「.load()」というコードで詰まってしまいました。

ソースコード例

glueContext.read.option("example", role).load()

検索しても全然出てこなかったので教えていただきたいのですが、
両方関数なのでしょうか。
また、それぞれどのような役割があるのでしょうか。
ソースコード例が短く、足りない部分があるかとは思いますが、
ご回答よろしくお願いします。

0

2Answer

AWSにあまり詳しくないですが、どのような実装になっているかについては予想がつきますので回答させていただきます。

分解して考えるとわかりやすいので、順を追って説明します。

glueContext.read

glueContextオブジェクトのreadオブジェクトを呼び出しています。
readオブジェクトは何かしらのデータを読み込む機能を備えるオブジェクトであると考えられます(ほかの言語ではxxxReaderとか言われるもの)。

glueContext.read.option('example', role)

readオブジェクトのoption()メソッドを実行しています。
option()メソッドの役割は読み込みの設定を行うことでしょう。
おそらく返り値はreadオブジェクトです。
したがって、option()メソッドはoption().option()みたいに重ね掛けできます。

glueContext.read.option('example', role).load()

readオブジェクトのload()メソッドを呼び出し、読込を実行しています。
先ほど述べた通り、option()メソッドはreadオブジェクトを返しているので、load()メソッドはreadオブジェクトのメソッドです。

以上が一連の処理の流れです。
多少の違いはあれどおおむね間違っていないと思います。

高機能なエディタ(vscodeなど)を使用しているなら、マウスオーバーでdocstringが出たり、右クリックで「定義へ移動」などを選択して実際の実装に行けたりしますので、参考にしてみてください。

1Like

glueContextawsglue.context.GlueContext オブジェクト1だと思います。これは pyspark.sql.SqlContext クラス2のサブクラスで、 read プロパティ3はそこから継承しています。

read プロパティは pyspark.sql.DataFrameReader オブジェクト4を返します。その option() メソッド5は self に入力オプションをセットして self 自身を返します。 load() メソッドは自身が表すデータストリームからデータを読んで pyspark.sql.DataFrame オブジェクト6を返します。

処理の流れについては @bizzpaper さんの回答の通りです。

  1. https://github.com/awslabs/aws-glue-libs/blob/v3.0/awsglue/context.py#L49

  2. https://spark.apache.org/docs/2.4.7/api/python/pyspark.sql.html#pyspark.sql.SQLContext

  3. https://spark.apache.org/docs/2.4.7/api/python/pyspark.sql.html#pyspark.sql.SQLContext.read

  4. https://spark.apache.org/docs/2.4.7/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader

  5. https://spark.apache.org/docs/2.4.7/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader.option

  6. https://spark.apache.org/docs/2.4.7/api/python/pyspark.sql.html#pyspark.sql.DataFrame

0Like

Your answer might help someone💌