如何使用正则表达式从 PySpark 数据块笔记本中的文件解析表名

How to use regex to parse the Tablename from a file in PySpark databricks notebook

我正在尝试使用正则表达式从镶木地板文件中获取 table 名称。我正在使用以下代码尝试此操作,但 ctSchema 数据框似乎没有 运行 导致作业 return 0 个结果。

    ci= spark.createDataFrame(data=[("","","")], schema=ciSchema)
    files=dbutils.fs.ls('a filepath goes here')
    
    results = {}
    is_error = False
    
    for fi in files:
          try:
            dataFile = spark.read.parquet(fi.path)
            ctSchema = spark.createDataFrame(data = dataFile.dtypes, schema = tSchema).withColumn("TableName", regexp_extract(input_file_name(),"([a-zA-Z0-9]+_[a-zA-Z0-9]+)_shard_\d+_of_\d+\.parquet",1), lit(fi.name))
            ci = ci.union(ctSchema)
          except Exception as e:
            results[fi.name] = f"Error: {e}"
            is_error = True

你的正则表达式 ([a-zA-Z0-9]+_[a-zA-Z0-9]+)_shard_\d+_of_\d+\.parquet 不正确,试试这个 [a-zA-Z0-9]+_([a-zA-Z0-9]+)_page_\d+_of_\d+\.parquet

首先,我使用 page_ 而不是 shard_,这与您的文件名匹配。

其次,您不想将匹配 TCP_119Customer([a-zA-Z0-9]+_[a-zA-Z0-9]+) 分组。您只需要第二组,因此将其更改为 [a-zA-Z0-9]+_([a-zA-Z0-9]+) 即可解决问题。