如何使用正则表达式从 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]+)
即可解决问题。
我正在尝试使用正则表达式从镶木地板文件中获取 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]+)
即可解决问题。