如何使用正则表达式解析PySpark databricks notebook中的Tablename文件



我正在尝试使用regex从parquet文件中获取表名。我正在使用以下代码来尝试此操作,但ctSchema数据框似乎没有运行,导致作业返回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_,这与您的文件名匹配。

第二,您不想将([a-zA-Z0-9]+_[a-zA-Z0-9]+)分组为与TCP_119Customer匹配的组。您只需要第二组,所以将其更改为[a-zA-Z0-9]+_([a-zA-Z0-9]+)将解决这个问题。

最新更新