Pyspark映射正则表达式

2024-09-28 05:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pyspark数据框,带有文本列

  1. 我想用正则表达式映射这些值
    df = df.withColumn('mapped_col', regexp_replace('mapped_col', '.*-RH', 'RH'))
    df = df.withColumn('mapped_col', regexp_replace('mapped_col', '.*-FI, 'FI'))
  1. 另外,我想根据字典映射特定的值,我做了以下工作(映射器来自create_map()):
     df = df.withColumn("mapped_col",mapper.getItem(F.col("action")))
  1. 最后,字典或正则表达式未映射的值将设置为null。我不知道如何按照其他两个部分来做这部分

有没有可能有一个类似正则表达式的词汇表,这样我就可以重新组合这两个“函数”? {.*-RH:“RH”,“*FI:“FI”}

原始输出示例

+-----------------------------+
|message                      |
+-----------------------------+
|GDF2009                      | 
|GDF2014                      |
|ADS-set                      |
|ADS-set                      |
|XSQXQXQSDZADAA5454546a45a4-FI|
|dadaccpjpifjpsjfefspolamml-FI|
|dqdazdaapijiejoajojp565656-RH|
|kijipiadoa
+-----------------------------+

预期输出示例

+-----------------------------+-----------------------------+
|message                      |status|
+-----------------------------+-----------------------------+
|GDF2009                      | GDF
|GDF2014                      | GDF
|ADS/set                      | ADS
|ADS-set                      | ADS 
|XSQXQXQSDZADAA5454546a45a4-FI| FI
|dadaccpjpifjpsjfefspolamml-FI| FI
|dqdazdaapijiejoajojp565656-RH| RH
|kijipiadoa                   | null or ??

所以第4行用dict映射,另一行用regex映射。未映射为空或?? 谢谢,


Tags: 示例messagedf字典colnullreplacefi
1条回答
网友
1楼 · 发布于 2024-09-28 05:20:33

您可以使用contains函数实现它:

from pyspark.sql.types import StringType

df = spark.createDataFrame(
    ["GDF2009", "GDF2014", "ADS-set", "ADS-set", "XSQXQXQSDZADAA5454546a45a4-FI", "dadaccpjpifjpsjfefspolamml-FI",
     "dqdazdaapijiejoajojp565656-RH", "kijipiadoa"], StringType()).toDF("message")
df.show()

names = ("GDF", "ADS", "FI", "RH")

def c(col, names):
    return [f.when(f.col(col).contains(i), i).otherwise("") for i in names]

df.select("message", f.concat_ws("", f.array_remove(f.array(*c("message", names)), "")).alias("status")).show()

输出:

+          +
|             message|
+          +
|             GDF2009|
|             GDF2014|
|             ADS-set|
|             ADS-set|
|XSQXQXQSDZADAA545...|
|dadaccpjpifjpsjfe...|
|dqdazdaapijiejoaj...|
|          kijipiadoa|
+          +

+          +   +
|             message|status|
+          +   +
|             GDF2009|   GDF|
|             GDF2014|   GDF|
|             ADS-set|   ADS|
|             ADS-set|   ADS|
|XSQXQXQSDZADAA545...|    FI|
|dadaccpjpifjpsjfe...|    FI|
|dqdazdaapijiejoaj...|    RH|
|          kijipiadoa|      |
+          +   +

相关问题 更多 >

    热门问题