それでは、PySparkを使ってデータを印刷する方法を学びましょう。
データは、今日利用可能な最も重要なものの1つです。
暗号化された形式でも復号化された形式でも利用可能です。
実際、私たちも日常的に膨大な量の情報を作成する傾向にあります。
スマートフォンのボタンをクリックするのも、パソコンでネットサーフィンをするのも、同じことです。
しかし、なぜ私たちはこのような話をするのでしょうか。
このような大量の情報をどのように管理するかということが、これまでの研究者が直面してきた大きな問題でした。
これを解決したのがテクノロジーでした。
Apache Sparkが登場し、この問題を解決するためにPySparkを作り上げました。
もしあなたがPySparkを初めて使うなら、ここにPySparkのチュートリアルがあります。
Pyspark を使ったスパーク入門
Apache Sparkは、巨大なソフトウェア開発プロジェクトの分析に関連するソリューションを考案するのに役立つ、データ管理エンジンです。
また、ビッグデータエンジニアやデータサイエンティストにとっても最適なツールです。
Sparkの知識を持つことは、様々な技術企業に就職するために必要なスキルの1つです。
Sparkには、多くの拡張機能と管理オプションが付属しています。
その1つがPythonのPysparkで、Pythonの開発者向けです。
これは、各コンピュータに明示的にインストールするライブラリをサポートするAPIの1つです。
だから、これは簡単に実装を管理することができます。
Pythonでは、ライブラリのインストールは非常に簡単であることは周知のとおりです。
PySpark を使ってデータを印刷する前に
PySparkを使用してデータを印刷するさまざまな方法を学ぶ前に、考慮しなければならない前提条件がいくつかあります。
- Pythonのコアな理解
- Pysparkとそれをサポートするパッケージのコアな理解。
- Python 3.6以上
- Java 1.8以上(最も必須)
- Jupyter NotebookやVS CodeなどのIDE。
確認方法は、コマンドプロンプトで以下のコマンドを入力してください。
python - - version
|
java -version |
import pyspark
from pyspark.sql import SparkSession
session = SparkSession.builder.appName( 'App' ).getOrCreate() # creating an app
|
PySparkを使用して、以下の方法でデータを印刷することができます。
- 生データの印刷
- 印刷されたデータを整形する
- 上位 20~30 行を表示
- 下の20行を表示する
- 表示前にデータをソートする
このチュートリアルの残りの部分で使用するリソースとツール。
- データセット: titanic.csv
データセット: titanic.csv * 環境: Anaconda Anaconda - IDE: Jupyter ノートブック
セッションの作成
spark環境でのセッションは、アクティビティのすべてのインスタンスの記録保持者です。
これを作成するために、sparkライブラリのSQLモジュールを使用します。
このSparkSessionクラスのbuilder属性には、appname()関数があります。
この関数は、アプリケーションの名前を文字列の形でパラメータとして受け取ります。
次に、ドット’.’演算子を使用して呼び出されるgetOrCreate()メソッドを使用して、アプリを作成します。
これらのコードを使って、私たちはアプリを「App」として作成します。
作成したアプリケーションにどのような名前を付けるかは自由です。
このままでは先に進めないので、セッションを作成することを忘れないでください。
コード
data = session.read.csv( 'Datasets/titanic.csv' )
data # calling the variable
|
data.show() |
PySparkを使った様々なデータ出力方法
さて、準備が整ったところで、本題に入りましょう。
では、ここでPySparkを使ったデータ印刷の様々な方法を学んでいきましょう。
1. 生データを印刷する
この例では、生のデータセットを扱います。
AI(人工知能)分野では、データの集まりをデータセットと呼びます。
データセットは、エクセル、カンマ区切り値ファイル、テキストファイル、サーバー文書モデルなど、さまざまな形式で提供されます。
ですから、生データを印刷するためにどのような種類のファイル形式を使っているかを記録しておいてください。
ここでは、拡張子が.csvのデータセットを使用しています。
セッションの read 属性には、ファイルを読み込むためのさまざまな関数があります。
これらの関数は、多くの場合、さまざまなファイルタイプに応じた名前を持っています。
したがって、ここではデータセットに csv() 関数を使用しています。
すべてを data 変数に格納します。
コード
data = session.read.option( 'header' , 'true' ).csv( 'Datasets/titanic.csv' , inferSchema = True )
data |
デフォルトでは、Pysparkはすべてのデータを文字列の形で読み込みます。
そこで、data変数を呼び出すと、各カラムの番号が文字列の形で返されます。
生データを表示するには、ドット演算子 ‘.’ を使って、data 変数とともに show() 関数を呼び出します。
data.show() |
data.show() # to display top 20 rows
|
2. データをフォーマットする
Pysparkでデータをフォーマットすることは、データセットに存在するカラムの適切なデータ型を表示することを意味します。
すべてのヘッダーを表示するために、option()関数を使用します。
この関数は、文字列の形で2つの引数を取ります。
- キー
- 値
key にはヘッダーとしての値を、value には true を指定します。
これは、上部に列番号を表示するのではなく、ヘッダーを表示する必要があることをスキャンするものです。
最も重要なのは、各カラムのデータ型をスキャンすることです。
そのためには、先ほどデータセットを読み込むのに使った csv() 関数で inferschema パラメータを有効にする必要があります。
これは boolean データ型のパラメータなので、これを True に設定して有効にする必要があります。
各関数の間はドット演算子でつないでいます。
コード
data.show( 30 ) # to display top 30 rows
|
data.head( 10 )
|
data.tail( 20 )
|
出力です。
ヘッダーが適切なデータ型で表示されていることがわかる。
3. 上位20〜30行を表示する
上位20~30行を表示するのは、たった1行のコードでできることです。
show()関数がこれをやってくれます。
データセットが大きすぎる場合、デフォルトでは上位20行が表示されます。
しかし、できる限り多くの行を表示させることができます。
show()関数のパラメータにその数を指定するだけです。
data = data.sort( 'PassengerId' )
data.show( 5 )
|
data = data.sort( 'Name' , 'Fare' )
data.show( 5 )
|
data.columns |
data = data.orderBy(data.Name.desc(), data.Fare.desc())
data.show( 5 )
|
同じことを head() 関数で実装することもできます。
この関数は、データセットの一番上のセクションの行にアクセスするためのものです。
行の数をパラメータとして受け取り、その数だけ表示します。
たとえば、最初の 10 行を表示するには、次のようにします。

しかし、結果は配列かリストの形になってしまいます。
そして最も残念なことは、何千行もあるような大きなデータセットには head() 関数が使えないということです。
以下はその証明です。

4. 下の20〜30行を表示する
これも少し簡単な作業です。
tail()関数がこれを助けてくれます。
データフレーム変数で呼び出し、パラメータとして表示したい行数を渡します。
たとえば、最後の20行を表示するには、次のように記述します。


同じように、データセットが大きすぎて、このような行を表示することはできないので、適切なビューを作成することはできません。
5. 表示前のデータの並べ替え
ソートとは、物事を適切な順序に並べることです。
昇順(小さいものから大きいものへ)、降順(大きいものから小さいものへ)でもよい。
これは、順序に従ってデータポイントを表示する際に重要な役割を果たします。
データフレーム内のカラムには様々な種類があります。
しかし、主なものは整数と文字列の2種類です。
- 整数の場合、数値の大きい順、小さい順にソートされます。
-
- 文字列の場合、アルファベット順でソートされます。
Pysparkのsort()関数は、この目的のためだけに用意されています。
この関数では、パラメータとして単一または複数のカラムを受け取ることができます。
データセットで試してみましょう。
データセットからPassengerIDカラムをソートします。
そのために、2つの関数を用意しました。
- sort()
- orderBy()
昇順で並べ替え


PassengerID カラムがソートされました。
このコードでは、すべての要素を昇順に並べています。
ここでは、1つのカラムだけをソートしています。
複数のカラムをソートするには、sort() 関数にカンマで区切って一つずつ渡します。


降順で並べ替え
これは、orderBy()関数に特化したものです。
この関数は、データを降順でソートするための特別なオプションを提供します。
この場合、列を挿入してドット演算子で結合した後、orderBy()内でdesc()関数を呼び出すだけで、すべてのコードは同じままです。
desc()は、特定の列のすべての要素を降順で整列またはソートします。
まず、データセットのすべてのカラムを見てみましょう。
コード


以下のコードでは、Name と Fare のカラムをソートします。
名前は文字列データ型なので、アルファベット順にソートされます。
一方、運賃は数字なので、大小のパターンでソートされます。
コード


まとめ
ということで、Pysparkを使ってデータを印刷する方法についてでした。
どのコードも非常に短く、理解しやすいと思います。
これだけあれば、Spark関数のコード知識を得るには十分です。
この環境は、ビッグデータやその他の産業・技術領域で非常に強力です。