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

     2023-04-15     55

关键词:

【中文标题】如何使用正则表达式从 PySpark databricks 笔记本中的文件中解析表名【英文标题】:How to use regex to parse the Tablename from a file in PySpark databricks notebook 【发布时间】:2021-10-28 06:24:03 【问题描述】:

我正在尝试使用正则表达式从镶木地板文件中获取表名。我正在使用以下代码尝试此操作,但 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

【问题讨论】:

为什么要单独读取文件? Spark 应该能够一次读取所有文件。并尝试minimize your code关注问题 刚开始使用 Spark,所以还不太确定正确的语法。进行了一些编辑以专注于代码的主要问题 试试这个df = spark.read.parquet('a filepath goes here') 来读取文件。我猜你的主要问题是关于regexp_extract?您能否提供示例输入和您的预期输出? 示例输入为 TCP_119Customer_page_1_of_1.parquet,因此输出为 119Customer 【参考方案1】:

您的正则表达式 ([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]+) 将解决此问题。

【讨论】:

解决了我的问题,我发过来的东西只是样本文件的命名无关紧要,但处理丢失的变量是一个单独的错误。

从字符串 PySpark 数据框列中删除正则表达式

】从字符串PySpark数据框列中删除正则表达式【英文标题】:RemoveRegexfromstringPySparkDataframeColumn【发布时间】:2018-01-1113:25:41【问题描述】:我需要从pyspark数据框中的一列字符串中删除正则表达式df=spark.createDataFrame([("Dog10H03","10H03"... 查看详情

PySpark array_remove 元素正则表达式问题

】PySparkarray_remove元素正则表达式问题【英文标题】:PySparkarray_removeelementsregexquestion【发布时间】:2021-04-1416:12:23【问题描述】:我正在尝试更好地学习PySpark,我正在流式传输推文并尝试从推文的文本中捕获主题标签(我知道twi... 查看详情

如何在 PySpark 中编写条件正则表达式替换?

】如何在PySpark中编写条件正则表达式替换?【英文标题】:HowcanIwriteconditionalregexreplaceinPySpark?【发布时间】:2021-03-2318:11:24【问题描述】:我试图让ifelse语句以when()和otherwise()函数的形式工作。我尝试了很多方法,但我的问题是... 查看详情

如何替换/删除 PySpark RDD 中的正则表达式?

】如何替换/删除PySparkRDD中的正则表达式?【英文标题】:Howtoreplace/removeregularexpressioninPySparkRDD?【发布时间】:2018-04-0800:59:53【问题描述】:我的句子是,“我好想把这个字符串去掉。”我将此文本文件传递为text=sc.textFile(...)我... 查看详情

pyspark:删除作为另一列值的子字符串,并从给定列的值中包含正则表达式字符

...除作为另一列值的子字符串,并从给定列的值中包含正则表达式字符【英文标题】:pyspark:Removesubstringthatisthevalueofanothercolumnandincludesregexcharactersfromthevalueofagivencolumn【发布时间】:2020-11-2612:54:25【问题描述】:假设我有一个类似... 查看详情

pyspark 使用正则表达式搜索关键字,然后与其他数据框连接

】pyspark使用正则表达式搜索关键字,然后与其他数据框连接【英文标题】:pysparkseachingkeywordswithregexandthenjoinwithotherdataframe【发布时间】:2020-07-0702:34:08【问题描述】:我有两个数据框数据框AnamegroceriesMikeapple,orange,banana,noodle,redw... 查看详情

Pyspark SparkSQL 正则表达式在空格前获取子字符串

】PysparkSparkSQL正则表达式在空格前获取子字符串【英文标题】:PysparkSparkSQLregextogetsubstringbeforespace【发布时间】:2020-12-1913:18:26【问题描述】:我在Athena中编写了一个SQL,它使用regex_extract从列中提取子字符串,它提取字符串,... 查看详情

如何从字段中的值中删除 - python 或 pyspark

...231-206-2222231-206-2344231-206-1111231-206-1111我尝试对其进行正则表达式但无济于事。我是新手,所以任何想法都会有所帮助。有什么建议 查看详情

pyspark 中的正则表达式来检查字母和空格(也可以使用 uni 代码)

】pyspark中的正则表达式来检查字母和空格(也可以使用uni代码)【英文标题】:Regularexpressioninpysparktocheckalphabetsandspace(Alsoworkwithunicodes)【发布时间】:2020-03-0316:55:31【问题描述】:我需要一个验证下表的正则表达式。只有当字... 查看详情

如何在 Pyspark 中基于正则表达式条件验证(和删除)列,而无需多次扫描和改组?

】如何在Pyspark中基于正则表达式条件验证(和删除)列,而无需多次扫描和改组?【英文标题】:Howtovalidate(anddrop)acolumnbasedonaregexconditioninPysparkwithoutmultiplescanningandshuffling?【发布时间】:2019-09-3017:04:47【问题描述】:我想根据... 查看详情

PySpark UDF 优化挑战使用带有正则表达式的字典(Scala?)

】PySparkUDF优化挑战使用带有正则表达式的字典(Scala?)【英文标题】:PySparkUDFoptimizationchallengeusingadictionarywithregex\'s(Scala?)【发布时间】:2020-08-1204:47:31【问题描述】:我正在尝试优化下面的代码(PySparkUDF)。它给了我想要的结... 查看详情

pyspark用正则表达式读取csv文件

】pyspark用正则表达式读取csv文件【英文标题】:pysparkreadcsvfilewithregularexpression【发布时间】:2018-06-1509:21:00【问题描述】:我正在尝试从具有特定模式的目录中读取csv文件我想匹配所有包含此字符串"logs_455DD_33的文件t应该匹... 查看详情

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列

】如何通过Pyspark中同一数据框中另一列的正则表达式值过滤数据框中的一列【英文标题】:HowtofilteracolumninadataframebytheregexvalueofanothercolumninsamedataframeinPyspark【发布时间】:2020-03-0218:21:50【问题描述】:我正在尝试过滤数据框中... 查看详情

如何使用正则表达式从一行文本中提取数值?

】如何使用正则表达式从一行文本中提取数值?【英文标题】:Howtoextractanumericvaluefromalineoftextwitharegularexpression?【发布时间】:2021-12-0318:58:19【问题描述】:我是正则表达式的新手,帮我从文本中提取必要的信息:salespackquantity=... 查看详情

PySpark textFile 命令中的正则表达式

】PySparktextFile命令中的正则表达式【英文标题】:RegularexpressionsinPySparktextFilecommand【发布时间】:2015-06-1815:34:31【问题描述】:我试图弄清楚在选择多个感兴趣的文件时我可以推动这个命令多远。例如,我使用以下通配符在多个... 查看详情

PySpark 正则表达式以两个条件提取字符串

】PySpark正则表达式以两个条件提取字符串【英文标题】:PySparkregextoextractstringwithtwoconditions【发布时间】:2021-12-1306:15:06【问题描述】:我有一个如下所示的数据框:idcol11ACC12-34-11-123-122-A2ACCTASKS12-34-11-123-122-B3ABB12-34-11-123-122-C我... 查看详情

如何使用正则表达式和外壳从字符串中提取值?

】如何使用正则表达式和外壳从字符串中提取值?【英文标题】:Howtoextractavaluefromastringusingregexandashell?【发布时间】:2011-03-2005:22:09【问题描述】:我在shell中,我有这个字符串:12BBQ,45rofl,89lol使用正则表达式:\\d+(?=rofl),结果... 查看详情

如何使用正则表达式规则从 json 数据响应中检索值?

】如何使用正则表达式规则从json数据响应中检索值?【英文标题】:Howtoretrievevaluesfromjsondataresponseusingregexregulations?【发布时间】:2016-06-2900:06:32【问题描述】:根据我从回复中收到的内容,我很难阅读我的正则表达式匹配。任... 查看详情