PySparkにおける to_date 関数の使用方法

データ処理や分析において、文字列形式の日付データを適切な日付形式に変換することは非常に重要です。PySparkは、これを簡単に実現するために to_date 関数を提供しています。この記事では、PySparkの to_date 関数について、その基本的な使い方や具体的な応用例を解説します。

1. to_date 関数の基本概念

to_date 関数は、文字列形式の日付データを日付型 (DateType) に変換するための関数です。この関数を使用することで、文字列データを日付データとして処理できるようになります。

基本構文

pyspark.sql.functions.to_date(col, format=None)
  • col: 変換対象の列。
  • format: 日付のフォーマット(オプション)。デフォルトは None で、標準の日付形式に基づいて変換されます。

2. to_date 関数の基本的な使用方法

以下の例では、文字列形式の日付データを to_date 関数を使用して日付型に変換します。

from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date

# SparkSessionの作成
spark = SparkSession.builder.appName("ToDateExample").getOrCreate()

# サンプルデータの作成
data = [("2021-07-01",), ("2021-08-15",), ("2021-09-30",)]
columns = ["date_string"]

# データフレームの作成
df = spark.createDataFrame(data, columns)

# データフレームの表示
df.show()

# 文字列を日付型に変換
df_with_date = df.withColumn("date", to_date(df["date_string"], "yyyy-MM-dd"))

# 結果の表示
df_with_date.show()
+-----------+
|date_string|
+-----------+
| 2021-07-01|
| 2021-08-15|
| 2021-09-30|
+-----------+

+-----------+----------+
|date_string|      date|
+-----------+----------+
| 2021-07-01|2021-07-01|
| 2021-08-15|2021-08-15|
| 2021-09-30|2021-09-30|
+-----------+----------+

3. フォーマットを指定した変換

to_date 関数は、日付文字列の形式が標準的な形式でない場合にフォーマットを指定することができます。以下の例では、異なるフォーマットの日付文字列を変換します。

# サンプルデータの作成
data = [("01-07-2021",), ("15-08-2021",), ("30-09-2021",)]
columns = ["date_string"]

# データフレームの作成
df = spark.createDataFrame(data, columns)

# データフレームの表示
df.show()

# フォーマットを指定して文字列を日付型に変換
df_with_date = df.withColumn("date", to_date(df["date_string"], "dd-MM-yyyy"))

# 結果の表示
df_with_date.show()
+-----------+
|date_string|
+-----------+
| 01-07-2021|
| 15-08-2021|
| 30-09-2021|
+-----------+

+-----------+----------+
|date_string|      date|
+-----------+----------+
| 01-07-2021|2021-07-01|
| 15-08-2021|2021-08-15|
| 30-09-2021|2021-09-30|
+-----------+----------+

4. 時間情報の削除

文字列が日時形式である場合でも、to_date 関数を使用して日付部分のみを抽出できます。

# サンプルデータの作成
data = [("2021-07-01 12:34:56",), ("2021-08-15 07:08:09",), ("2021-09-30 23:59:59",)]
columns = ["datetime_string"]

# データフレームの作成
df = spark.createDataFrame(data, columns)

# データフレームの表示
df.show(truncate=False)

# 文字列を日付型に変換
df_with_date = df.withColumn("date", to_date(df["datetime_string"], "yyyy-MM-dd HH:mm:ss"))

# 結果の表示
df_with_date.show()
+-------------------+
|datetime_string    |
+-------------------+
|2021-07-01 12:34:56|
|2021-08-15 07:08:09|
|2021-09-30 23:59:59|
+-------------------+

+-------------------+----------+
|    datetime_string|      date|
+-------------------+----------+
|2021-07-01 12:34:56|2021-07-01|
|2021-08-15 07:08:09|2021-08-15|
|2021-09-30 23:59:59|2021-09-30|
+-------------------+----------+

5. 実践的な応用例

to_date 関数を使用することで、日付データを効率的に操作できます。以下の例では、日付列を基にデータをフィルタリングします。

# サンプルデータの作成
data = [("2021-07-01", 100), ("2021-08-15", 200), ("2021-09-30", 300)]
columns = ["date_string", "value"]

# データフレームの作成
df = spark.createDataFrame(data, columns)

# 文字列を日付型に変換
df_with_date = df.withColumn("date", to_date(df["date_string"], "yyyy-MM-dd"))

# 2021年8月以降のデータをフィルタリング
df_filtered = df_with_date.filter(df_with_date["date"] >= "2021-08-01")

# 結果の表示
df_filtered.show()
+-----------+-----+----------+
|date_string|value|      date|
+-----------+-----+----------+
| 2021-08-15|  200|2021-08-15|
| 2021-09-30|  300|2021-09-30|
+-----------+-----+----------+

まとめ

PySparkの to_date 関数は、文字列形式の日付データを日付型に変換するための便利なツールです。この関数を使用することで、文字列データを正確に日付データとして処理できるようになります。フォーマットの指定や時間情報の削除など、さまざまなシナリオに対応する方法を紹介しました。これらのテクニックを活用して、PySparkでのデータ処理をさらに効果的に行いましょう。

PySpark公式ドキュメント: to_date

よかったらシェアしてね!
目次
閉じる