在 PySpark 中,处理日期和字符串格式是一个常见的需求。PySpark 提供了多种函数来帮助你进行日期和字符串格式的转换。以下是一些常用的函数和示例,展示如何在 PySpark 中进行这些操作。
PySpark 提供了一些内置的日期和时间函数,可以帮助你处理日期和时间数据。
to_date
和 to_timestamp
to_date
:将字符串转换为日期。to_timestamp
:将字符串转换为时间戳。from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date, to_timestamp
# 创建 SparkSession
spark = SparkSession.builder.appName("DateConversion").getOrCreate()
# 创建示例 DataFrame
data = [("2023-10-01", "2023-10-01 12:34:56")]
df = spark.createDataFrame(data, ["date_str", "timestamp_str"])
# 转换字符串为日期和时间戳
df = df.withColumn("date", to_date("date_str", "yyyy-MM-dd"))
df = df.withColumn("timestamp", to_timestamp("timestamp_str", "yyyy-MM-dd HH:mm:ss"))
df.show()
date_format
date_format
:将日期或时间戳转换为指定格式的字符串。from pyspark.sql.functions import date_format
# 将日期转换为指定格式的字符串
df = df.withColumn("formatted_date", date_format("date", "MM/dd/yyyy"))
df = df.withColumn("formatted_timestamp", date_format("timestamp", "MM/dd/yyyy HH:mm:ss"))
df.show()
PySpark 也提供了一些字符串函数,可以帮助你处理字符串数据。
concat
和 concat_ws
concat
:连接多个列或字符串。concat_ws
:使用指定的分隔符连接多个列或字符串。from pyspark.sql.functions import concat, concat_ws
# 创建示例 DataFrame
data = [("John", "Doe"), ("Jane", "Smith")]
df = spark.createDataFrame(data, ["first_name", "last_name"])
# 连接字符串
df = df.withColumn("full_name", concat(df.first_name, df.last_name))
df = df.withColumn("full_name_with_space", concat_ws(" ", df.first_name, df.last_name))
df.show()
substring
和 substr
substring
:提取子字符串。substr
:提取子字符串(与 substring
类似)。from pyspark.sql.functions import substring
# 提取子字符串
df = df.withColumn("first_initial", substring("first_name", 1, 1))
df = df.withColumn("last_initial", df.last_name.substr(1, 1))
df.show()
以下是一个综合示例,展示如何在 PySpark 中进行日期和字符串格式的转换。
from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date, to_timestamp, date_format, concat_ws, substring
# 创建 SparkSession
spark = SparkSession.builder.appName("DateStringConversion").getOrCreate()
# 创建示例 DataFrame
data = [("2023-10-01", "2023-10-01 12:34:56", "John", "Doe")]
df = spark.createDataFrame(data, ["date_str", "timestamp_str", "first_name", "last_name"])
# 转换字符串为日期和时间戳
df = df.withColumn("date", to_date("date_str", "yyyy-MM-dd"))
df = df.withColumn("timestamp", to_timestamp("timestamp_str", "yyyy-MM-dd HH:mm:ss"))
# 将日期转换为指定格式的字符串
df = df.withColumn("formatted_date", date_format("date", "MM/dd/yyyy"))
df = df.withColumn("formatted_timestamp", date_format("timestamp", "MM/dd/yyyy HH:mm:ss"))
# 连接字符串
df = df.withColumn("full_name", concat_ws(" ", df.first_name, df.last_name))
# 提取子字符串
df = df.withColumn("first_initial", substring("first_name", 1, 1))
df = df.withColumn("last_initial", df.last_name.substr(1, 1))
df.show()
to_date
和 to_timestamp
将字符串转换为日期和时间戳。date_format
将日期和时间戳转换为指定格式的字符串。concat_ws
连接字符串。substring
和 substr
提取子字符串。领取专属 10元无门槛券
手把手带您无忧上云