如何在PySpark中按3字符长度拆分DataFrame列并拆分为多行?
PySpark按固定3字符拆分列并转为多行
要把DataFrame里的字符串列按每3个字符拆分并转成多行,你可以结合regexp_split(正则拆分)和explode(行展开)实现,具体操作如下:
1. 核心逻辑
普通split函数只能按指定分隔符拆分,没法直接按固定长度处理。这里用正则零宽断言(?<=.{3}),匹配每3个字符后的位置作为拆分点,把字符串拆成每3个字符一组的数组,再用explode把数组元素转成单独行。
2. 代码实现
先导入所需函数:
from pyspark.sql import SparkSession from pyspark.sql.functions import regexp_split, explode
创建示例DataFrame:
spark = SparkSession.builder.appName("fixed_length_split").getOrCreate() data = [(1, "ASD,GR D!G&HIK-HGD+TD")] df = spark.createDataFrame(data, ["Id", "details"]) df.show(truncate=False)
执行拆分与行展开:
df_result = df.withColumn("split_col", regexp_split("details", "(?<=.{3})")) \ .withColumn("details", explode("split_col")) \ .drop("split_col") df_result.show(truncate=False)
3. 输出结果
运行后会得到符合预期的结果:
+---+------+ |Id |details| +---+------+ |1 |ASD | |1 |,GR | |1 | D! | |1 |G&H | |1 |IK- | |1 |HGD | |1 |+TD | +---+------+
如果字符串长度不是3的倍数,最后不足3个字符的部分会自动作为最后一组保留,无需额外处理。
内容的提问来源于stack exchange,提问作者Santosh Pandey
相关产品推荐
相关产品推荐

