pysparkMap正则表达式

t40tm48m  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(439)

我有一个pyspark数据框,有文本列。
我想用regex表达式来Map这些值。

df = df.withColumn('mapped_col', regexp_replace('mapped_col', '.*-RH', 'RH'))
    df = df.withColumn('mapped_col', regexp_replace('mapped_col', '.*-FI, 'FI'))

另外,我想根据字典Map具体的值,我做了以下工作(Map器来自create\u map()):

df = df.withColumn("mapped_col",mapper.getItem(F.col("action")))

最后,没有被dictionnary或regex表达式Map的值将被设置为null。我不知道如何按照另外两个来做这部分。
有没有可能有一个类似于regex表达式的词汇表,这样我就可以重新组合这两个‘函数’?{”*-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 ??

所以第一行和第四行用dictMap,另一行用regexMap。未Map为空或??谢谢您,

nnsrf1az

nnsrf1az1#

你可以使用 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|      |
+--------------------+------+

相关问题