【分散処理】PySpark ~ DataFrame / 項目数を取得するには ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/05/18/154829

の続き。

小ネタ。
デフォルト項目名「_c0」などの項目を変更するのに
項目数を取得したかったのでメモする

目次

【1】項目数を取得するには
【2】サンプル
 例1:簡単なサンプル
 例2:デフォルト項目名「_c0」を変更する

【1】項目数を取得するには

data_frame.columns で項目名のリストが取得できるので、
len(data_frame.columns) で可能。

【2】サンプル

テストデータ「input.csv」(ヘッダーなし)

x0001,Mike,Sales
x0002,Tom,IT
x0003,Sam,Sales
x0004,Kevin,Human resources
x0005,Bob,IT
x0006,Alice,Banking
x0007,Carol,IT
x0008,Tom,Banking
x0009,Mike,IT
x0010,Bob,Sales

例1:簡単なサンプル

from pyspark import SparkContext
from pyspark.sql import SparkSession

spark_context = SparkContext()
spark = SparkSession(spark_context)

data_frame = spark.read.csv("input.csv", header=False)

print(f"column number = {len(data_frame.columns)}")
print(f"column = {data_frame.columns}")

data_frame.show()

出力結果

column number = 3
column = ['_c0', '_c1', '_c2']
+-----+-----+---------------+
|  _c0|  _c1|            _c2|
+-----+-----+---------------+
|x0001| Mike|          Sales|
|x0002|  Tom|             IT|
|x0003|  Sam|          Sales|
|x0004|Kevin|Human resources|
|x0005|  Bob|             IT|
|x0006|Alice|        Banking|
|x0007|Carol|             IT|
|x0008|  Tom|        Banking|
|x0009| Mike|             IT|
|x0010|  Bob|          Sales|
+-----+-----+---------------+

例2:デフォルト項目名「_c0」を変更する

from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType

spark_context = SparkContext()
spark = SparkSession(spark_context)

data_frame = spark.read.csv("input.csv", header=False)

column_count = len(data_frame.columns)
item_list = \
  [StructField(f"column_{i}", StringType(), True) \
    for i in range(column_count)]
schema = StructType(item_list)
data_frame = spark.createDataFrame(data_frame.rdd, schema)

data_frame.show()

出力結果

+--------+--------+---------------+
|column_0|column_1|       column_2|
+--------+--------+---------------+
|   x0001|    Mike|          Sales|
|   x0002|     Tom|             IT|
|   x0003|     Sam|          Sales|
|   x0004|   Kevin|Human resources|
|   x0005|     Bob|             IT|
|   x0006|   Alice|        Banking|
|   x0007|   Carol|             IT|
|   x0008|     Tom|        Banking|
|   x0009|    Mike|             IT|
|   x0010|     Bob|          Sales|
+--------+--------+---------------+

関連記事

PySpark ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2019/11/14/221126
PySpark ~ DataFrame / データ操作編 ~
https://dk521123.hatenablog.com/entry/2020/01/04/150942
PySpark ~ DataFrame / テーブル・項目操作編 ~
https://dk521123.hatenablog.com/entry/2020/05/18/154829
PySpark ~ DB・テーブル・項目取得編 ~
https://dk521123.hatenablog.com/entry/2021/05/24/144317