在两个表上联接,file_name有多余的字符串,regex从文件名中删除字符串并进行联接

哈西特·卡卡(Harshit Kakkar)

我有两个表,分别需要在table_name和file_name上应用联接。问题是table_name与表2中的file_name相比有一些额外的字符串。

使用正则表达式,如何从table_name中删除多余的字符串,使其与表2的file_name兼容?

TABLE 1:

table_name                                                                 audit_record_count
Immunology_COVID-19_Treatment_202006221630_01.csv                          1260124
Immunology_COVID-19_Trial_Design_202006221630_01.csv                       2173762
Immunology_COVID-19_Planned_Treatment_202006221630_01.csv                  1350135
Immunology_COVID-19_Patient_Characteristic_202006221630_01.csv             2173762
Immunology_COVID-19_Intervention_Type_202006221630_01.csv                  2173762
Immunology_COVID-19_Arm_202006221630_01.csv                                      4
Immunology_COVID-19_Actual_Treatment_202006221630_01.csv                   2173762
Immunology_COVID-19_Publication_202006221630_01.csv                        2173762
Immunology_COVID-19_Outcome_202006221630_01.csv                            2173762
Immunology_COVID-19_Intervention_Type_Factor_202006221630_01.csv           2173762
Immunology_COVID-19_Inclusion_Criteria_202006221630_01.csv                 2173762
Immunology_COVID-19_Curation_202006221630_01.csv                           2173762

TABLE 2:

file_name                           csv_record_count
Treatment                           1260124
Trial_Design                        2173762
Planned_Treatment                   1350135
Patient_Characteristic              2173762
Intervention_Type                   2173762
Arm                                       4
Actual_Treatment                    2173762
Publication                         2173762
Outcome                             2173762
Intervention_Type_Factor            2173762
Inclusion_Criteria                  2173762
Curation                            2173762

我试过的

audit_file_df = spark.read.csv(
            f"s3://{config['raw_bucket']}/{config['landing_directory']}/{config['audit_file']}/{watermark_timestamp}*.csv",
            header=False, inferSchema=True) \
            .withColumnRenamed("_c0", "table_name").withColumnRenamed("_c1", "audit_record_count")\
            .selectExpr("regexp_extract(table_name, '^(.(?!(\\\\d{12}_\\\\d{2,4}.csv|\\\\d{12}.csv)))*', 0) AS table_name",'audit_record_count') 
        
        print("audit_file_df :",audit_file_df)
        audit_file_df.show()
        validation_df = audit_file_df.join(schema_validation_df, how='inner', on=audit_file_df['table_name'] == schema_validation_df['file_name']).withColumn("count_match",
                                                                                                     col=col(
                                                                                                         'audit_record_count') == col(
                                                                                                         'csv_record_count'))
        print("Record validation result")
        validation_df.show()

我能够从table_name中删除时间戳,但无法提取file_name来使加入条件起作用。

加成

Immunology_COVID-19不固定,可能会随另一个文件而变化,table_name的格式为:

TA_Indication_data_timestamp_nn.csv
维纳

在表1中创建一个包含该data部分的附加列

df = df.withColumn('data', F.regexp_extract(F.col('table_name'), '.*?_.*?_(.*)_\d{12}_\d{2}\.csv', 1))

+----------------------------------------------------------------+---------+------------------------+
|table_name                                                      |audit_rec|data                    |
+----------------------------------------------------------------+---------+------------------------+
|Immunology_COVID-19_Treatment_202006221630_01.csv               |1260124  |Treatment               |
|Immunology_COVID-19_Trial_Design_202006221630_01.csv            |2173762  |Trial_Design            |
|Immunology_COVID-19_Planned_Treatment_202006221630_01.csv       |1350135  |Planned_Treatment       |
|Immunology_COVID-19_Patient_Characteristic_202006221630_01.csv  |2173762  |Patient_Characteristic  |
|Immunology_COVID-19_Intervention_Type_202006221630_01.csv       |2173762  |Intervention_Type       |
|Immunology_COVID-19_Arm_202006221630_01.csv                     |4        |Arm                     |
|Immunology_COVID-19_Actual_Treatment_202006221630_01.csv        |2173762  |Actual_Treatment        |
|Immunology_COVID-19_Publication_202006221630_01.csv             |2173762  |Publication             |
|Immunology_COVID-19_Outcome_202006221630_01.csv                 |2173762  |Outcome                 |
|Immunology_COVID-19_Intervention_Type_Factor_202006221630_01.csv|2173762  |Intervention_Type_Factor|
|Immunology_COVID-19_Inclusion_Criteria_202006221630_01.csv      |2173762  |Inclusion_Criteria      |
|Immunology_COVID-19_Curation_202006221630_01.csv                |2173762  |Curation                |
+----------------------------------------------------------------+---------+------------------------+

然后,您可以使用table1.data连接表table2.file_name然后继续进行问题中已经给出的审核检查。

正则表达式的棘手部分是使用非贪婪的限定词,因为该data部分本身可以包含下划线字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文件名与提供的模式进行比较,或者比较两个具有通配符的字符串

来自分类Dev

如何基于字段的子字符串值联接两个表?

来自分类Dev

使用 3 个表和联接删除其他记录中包含字符串的记录

来自分类Dev

如何在文件名中包含匹配字符串的两个文件中分类?

来自分类Dev

如何从文件名中删除某些字符串?

来自分类Dev

从文件名中删除字符串

来自分类Dev

更改字符串(在文件名周围加上括号并获得两个反斜杠)

来自分类Dev

如何从文件名追加字符串并将其插入列并进行修改?

来自分类Dev

RegEx字符串可查找两个字符串并删除文件中的其余文本

来自分类Dev

导入文件后从字符串中删除多余的字符

来自分类Dev

从字符串中删除前两个单词

来自分类Dev

将sed插入一个衬里以从文件名中删除字符串

来自分类Dev

如何从字符串中删除两个标签之间出现的所有子字符串?

来自分类Dev

查询联接表中的查找字符串

来自分类Dev

如何在Lua中打印联接的字符串表?

来自分类Dev

如何在Lua中打印联接的字符串表?

来自分类Dev

PYTHON REGEX 从字符串中搜索所有 .sql 文件名

来自分类Dev

从文件名的开头删除四个字符的字符串,从文件名的末尾删除十三个字符的字符串

来自分类Dev

比较两个文件中的字符串

来自分类Dev

如何在两个文件中匹配字符串并替换字符串?

来自分类Dev

在PHP中删除多余的“>”字符串

来自分类Dev

获取目录中每个文件名的前两个字符串作为txt文件

来自分类Dev

从Unicode字符串中删除文件名中禁止字符的最有效方法

来自分类Dev

在Powershell中首次出现连字符时,删除所有文件名中的变量字符串

来自分类Dev

删除R中两个特定字母之前的所有前导字符串

来自分类Dev

删除R中两个特定字母之前的所有前导字符串

来自分类Dev

在 Windows 中的特定字符串之后从文件名中删除字符的最佳方法

来自分类Dev

如何删除文件名中没有给定字符串的某些扩展名文件?

来自分类Dev

删除除具有特定字符串的文件名以外的所有文件

Related 相关文章

  1. 1

    将文件名与提供的模式进行比较,或者比较两个具有通配符的字符串

  2. 2

    如何基于字段的子字符串值联接两个表?

  3. 3

    使用 3 个表和联接删除其他记录中包含字符串的记录

  4. 4

    如何在文件名中包含匹配字符串的两个文件中分类?

  5. 5

    如何从文件名中删除某些字符串?

  6. 6

    从文件名中删除字符串

  7. 7

    更改字符串(在文件名周围加上括号并获得两个反斜杠)

  8. 8

    如何从文件名追加字符串并将其插入列并进行修改?

  9. 9

    RegEx字符串可查找两个字符串并删除文件中的其余文本

  10. 10

    导入文件后从字符串中删除多余的字符

  11. 11

    从字符串中删除前两个单词

  12. 12

    将sed插入一个衬里以从文件名中删除字符串

  13. 13

    如何从字符串中删除两个标签之间出现的所有子字符串?

  14. 14

    查询联接表中的查找字符串

  15. 15

    如何在Lua中打印联接的字符串表?

  16. 16

    如何在Lua中打印联接的字符串表?

  17. 17

    PYTHON REGEX 从字符串中搜索所有 .sql 文件名

  18. 18

    从文件名的开头删除四个字符的字符串,从文件名的末尾删除十三个字符的字符串

  19. 19

    比较两个文件中的字符串

  20. 20

    如何在两个文件中匹配字符串并替换字符串?

  21. 21

    在PHP中删除多余的“>”字符串

  22. 22

    获取目录中每个文件名的前两个字符串作为txt文件

  23. 23

    从Unicode字符串中删除文件名中禁止字符的最有效方法

  24. 24

    在Powershell中首次出现连字符时,删除所有文件名中的变量字符串

  25. 25

    删除R中两个特定字母之前的所有前导字符串

  26. 26

    删除R中两个特定字母之前的所有前导字符串

  27. 27

    在 Windows 中的特定字符串之后从文件名中删除字符的最佳方法

  28. 28

    如何删除文件名中没有给定字符串的某些扩展名文件?

  29. 29

    删除除具有特定字符串的文件名以外的所有文件

热门标签

归档