1. Learn
  2. /
  3. Courses
  4. /
  5. PySpark入門

Connected

Exercise

データにSparkをひと振り

前の演習では、Sparkから pandas へデータを移す方法を見ました。今度はその逆に、pandas のDataFrameをSparkクラスターに取り込んでみましょう。SparkSession クラスにはそのためのメソッドがあります。

.createDataFrame() メソッドは、pandas のDataFrameを受け取り、SparkのDataFrameを返します。

このメソッドの出力はローカルに保持され、SparkSession のカタログには登録されません。つまり、Spark DataFrameの各種メソッドは使えますが、ほかのコンテキストからはデータにアクセスできません。

たとえば、そのDataFrameを参照するSQLクエリ(.sql() メソッド使用)はエラーになります。この方法でアクセスしたい場合は、まず 一時テーブル として保存する必要があります。

これには、Spark DataFrameの .createTempView() メソッドを使います。引数は登録したい一時テーブル名の1つだけです。このメソッドはDataFrameをカタログ内のテーブルとして登録しますが、一時テーブルなので、そのSpark DataFrameを作成した特定の SparkSession からしかアクセスできません。

.createOrReplaceTempView() というメソッドもあります。これは、未登録なら新しい一時テーブルを作成し、既に存在する場合は安全に置き換えます。重複テーブルによる問題を避けるため、このメソッドを使います。

図を見て、Sparkのデータ構造同士がどのように相互作用するかを確認しましょう。

作業環境にはすでに spark という SparkSession が用意され、numpy は np、pandas は pd としてインポート済みです。

Instructions

100 XP
  • 乱数で pandas のDataFrameを作成するコードはすでに用意され、pd_temp として保存されています。
  • Sparkの .createDataFrame() を pd_temp を引数にして呼び出し、spark_temp というSpark DataFrameを作成してください。
  • Sparkクラスター内のテーブル一覧を確認し、新しいDataFrameが存在しないことを確かめてください。spark.catalog.listTables() が使えます。
  • 直前に作成した spark_temp を .createOrReplaceTempView() で一時テーブルとして登録してください。一時テーブル名は "temp" にします。テーブル名はこのメソッドの唯一の引数として指定する点に注意してください!
  • もう一度、テーブル一覧を確認しましょう。