PySpark 文字列を日付形式に変換する
MM-dd-yyyy 形式で日付を表す文字列列を持つ PySpark DataFrame があります。 to_date 関数を使用してこの列を日付形式に変換しようとすると、null が返されます。この記事では、この問題に対処する方法を説明します。
更新された推奨事項 (Spark 2.2 ):
Spark バージョン 2.2 以降の場合、推奨されるアプローチは to_date またはto_timestamp 関数。フォーマット引数をサポートするようになりました。これにより、入力形式を指定し、文字列列を日付またはタイムスタンプに直接変換できます:
from pyspark.sql.functions import to_timestamp df = spark.createDataFrame([('1997-02-28 10:30:00',)], ['t']) df.select(to_timestamp(df.t, 'yyyy-MM-dd HH:mm:ss').alias('dt')).collect() # Output: # [Row(dt=datetime.datetime(1997, 2, 28, 10, 30))]
元の回答 (Spark < 2.2):
以前の Spark バージョンでは、ユーザー定義関数を必要とせずに次のメソッドを使用できます。 (UDF):
from pyspark.sql.functions import unix_timestamp, from_unixtime df = spark.createDataFrame( [("11/25/1991",), ("11/24/1991",), ("11/30/1991",)], ['date_str'] ) df2 = df.select( 'date_str', from_unixtime(unix_timestamp('date_str', 'MM/dd/yyy')).alias('date') ) print(df2) # Output: # DataFrame[date_str: string, date: timestamp] df2.show(truncate=False) # Output: # +----------+-------------------+ # |date_str |date | # +----------+-------------------+ # |11/25/1991|1991-11-25 00:00:00| # |11/24/1991|1991-11-24 00:00:00| # |11/30/1991|1991-11-30 00:00:00| # +----------+-------------------+
このメソッドでは、unix_timestamp は文字列列を Unix タイムスタンプに変換し、from_unixtime は Unix タイムスタンプを日付列に変換します。
以上がPySpark の文字列列を日付形式に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。