PySparkデータフレームカラムをPythonリストに変換する方法
Published on
PySparkデータフレームを使用している場合は、データフレームからカラムを抽出し、Pythonリストとして使用してさらに分析する必要がある場合があります。この記事では、PySparkデータフレームの基礎から始め、その後、複数の方法でカラムを抽出する方法について探求します。
Python Pandas Dataframeからコードを使用せずにデータ可視化を簡単に作成しますか?
PyGWalkerは、可視化とともに探索的データ分析のためのPythonライブラリです。 PyGWalker (opens in a new tab)は、pandasデータフレームをTableauスタイルのユーザーインターフェイスに変換することにより、Jupyter Notebookデータ分析とデータ可視化のワークフローを簡素化できます(また、Polarisデータフレームもサポートされています)。
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 についてもっと学びたい場合は、他のチュートリアルもチェックしてみてください。
リンク: