pyspark:通过解析另一列中的字符串来创建列

13z8s7eq  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(476)

我有两个Dataframe,我想加入。
一个Dataframe是这样的,其中 syscode_ntwrk 被破折号分开。

spark.createDataFrame(
    [
        (1, '1234 - ESPN'), 
        (2, '1234 - ESPN'),
        (3, '963 - CNN'), 
        (4, '963 - CNN'),
    ],
    ['id', 'col1'] 
)

另一种是这种格式 syscode_ntwrk 连接在一起。

spark.createDataFrame(
    [
        (100, '1234ESPN'), 
        (297, '1234ESPN'),
        (3989, '963CNN'), 
        (478, '963CNN'),
    ],
    ['counts', 'col1'] 
)

在第二个Dataframe中有没有方法创建一个新列来匹配第一个Dataframe syscode_ntwrk ? Syscode 永远是一组数字 ntwrk 将始终是一组字母,因此是否有正则表达式在两者之间添加空格破折号空格?

55ooxyrt

55ooxyrt1#

你可以用 regexp_extract 提取组并使用 concat_ws 将组转换为所需的组。

import pyspark.sql.functions as F

df = spark.createDataFrame(
    [
        (100, '1234ESPN'), 
        (297, '1234ESPN'),
        (3989, '963CNN'), 
        (478, '963CNN'),
    ],
    ['counts', 'col1'] 
)

df.select(
    F.concat_ws(
        ' - ',
        F.regexp_extract('col1', '(\d+)([a-zA-Z]+)', 1),
        F.regexp_extract('col1', '(\d+)([a-zA-Z]+)', 2)
    ).alias('parsed')
).show()

+-----------+
|     parsed|
+-----------+
|1234 - ESPN|
|1234 - ESPN|
|  963 - CNN|
|  963 - CNN|
+-----------+

相关问题