Skip to content

PySparkデータフレームカラムをPythonリストに変換する方法

PySparkデータフレームを使用している場合は、データフレームからカラムを抽出し、Pythonリストとして使用してさらに分析する必要がある場合があります。この記事では、PySparkデータフレームの基礎から始め、その後、複数の方法でカラムを抽出する方法について探求します。

Python Pandas Dataframeからコードを使用せずにデータ可視化を簡単に作成しますか?

PyGWalkerは、可視化とともに探索的データ分析のためのPythonライブラリです。 PyGWalker (opens in a new tab)は、pandasデータフレームをTableauスタイルのユーザーインターフェイスに変換することにより、Jupyter Notebookデータ分析とデータ可視化のワークフローを簡素化できます(また、Polarisデータフレームもサポートされています)。

PyGWalker for Data visualization (opens in a new tab)

PySparkデータフレームの紹介

DataFrameは、名前付き列に整理された分散データのコレクションです。これはリレーショナルデータベースのテーブルや、RまたはPythonのデータフレームに相当します。PySpark DataFrameは、スキーマを持つRowのResilient Distributed Dataset(RDD)です。 PySpark SQLは、Sparkを使用して構造化データを操作するためのプログラミングインタフェースを提供します。 PySparkはCSV、JSON、Avro、Parquetなど、一般的なデータソースのほとんどをサポートしています。

より理解するために、簡単なPySparkデータフレームを作成し、そのスキーマをPySpark SQLを使用して確認してみましょう。

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, IntegerType, StringType
 
# Create SparkSession
spark = SparkSession.builder.appName("PySpark_Examples").getOrCreate()
 
#define schema
schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("name", StringType(), True)])
 
# create data frame
data = [(1,"John"),(2,"Mary"),(3,"Smith"),(4,"James")]
df = spark.createDataFrame(data, schema=schema)
 
# show data frame
df.show()

出力は次のようになります。

+---+-----+
| id| name|
+---+-----+
|  1| John|
|  2| Mary|
|  3|Smith|
|  4|James|
+---+-----+

一つの列をリストとして抽出する

PySparkデータフレームから列を抽出する方法はいくつかあります。このセクションではいくつかの方法を探っていきます。

方法1: Collect関数を使用する

PySparkのcollect()関数は、RDD(Resilient Distributed Datasets)のすべての要素をドライバープログラムに配列として返すために使用されます。 collect()を使用して、PySparkデータフレームの列をPythonリストに変換できます。以下はその方法です。

# extract name column using collect()
name_list = df.select('name').rdd.flatMap(lambda x: x).collect()
 
# print the list
print(name_list)

出力は以下のようになります。

[u'John', u'Mary', u'Smith', u'James']

ここでは、select()関数を使用してデータフレームから「name」列を選択しました。それから、列をRDDに変換するためにrdd.flatMap(lambda x: x)を使用し、そしてRDDのcollect()関数を使用して、データをPythonリストの形式で取得しました。

方法2: リストの内包表記を使用する

PySparkデータフレームから列をPythonリストとして抽出する別の方法は、リストの内包表記を使用することです。以下はその方法です。

# extract the name column using list comprehension
name_list = [row.name for row in df.select('name').collect()]
 
# print the list
print(name_list)

出力は以下のようになります。

[u'John', u'Mary', u'Smith', u'James']

ここでは、リストの内包表記を使用して、データフレームから「name」列をPythonリストとして抽出しました。最初にselect()関数を使用して列を抽出し、collect()関数を使用してデータをドライバーに戻しました。

方法3: toPandas()関数を使用する

toPandas()関数を使用して、PySparkデータフレームから列をPythonリストとして抽出することもできます。ただし、この方法は大きなデータフレームにはお勧めできません。なぜなら、メモリ不足のエラーを引き起こす可能性があるからです。以下はその方法です。

# extract name column using toPandas()
name_list = df.select('name').toPandas()['name'].tolist()
 
# print the list
print(name_list)

出力は以下のようになります。

ここでは select() 関数を使用して、データフレームから "name" 列を選択し、toPandas() 関数を使用してデータフレームを Pandas データフレームに変換しました。最後に、Pandas シリーズを Python リストに変換するために tolist() 関数を使用しました。

結論

この記事では、collect() 関数、リスト内包表記、toPandas() 関数など、PySpark データフレーム列を Python リストに抽出するためのさまざまな方法を探索しました。PySpark は、クラスタ内の複数のノードに作業を分散して、大規模なデータセットを並列に処理する効率的な方法を提供します。PySpark データフレームを理解し、それからデータを抽出する方法は、大規模なデータセットを扱うデータサイエンティストやエンジニアにとって貴重なスキルです。

この記事が役立ち、PySpark データフレームの列を Python リストに抽出する方法を学びました。PySpark や Pandas についてもっと学びたい場合は、他のチュートリアルもチェックしてみてください。


リンク: