PySpark正则表达式获取字符串和连字符之间的值

uujelgoq  于 2024-01-06  发布在  Spark
关注(0)|答案(1)|浏览(219)

我正在尝试提取字符串“line_number:“和连字符之间的数字。我正在为在PySpark中生成相同的正则表达式/子字符串而挣扎。下面是我在一个名为“whole_text”的列中的输入数据。字符串“line_number:“将总是在每行中后跟数字和连字符。有没有办法可以找到文本“line_number:“和其后的第一个连字符,并提取其间的数字?
新列中的输出应为121、3112等。
请帮帮我

  1. text:ABC12637-XYZ line_number:121-ABC:JJ11
  2. header:3AXYZ166-LMN line_number:3112-GHI:3A1

字符串

qnyhuwrf

qnyhuwrf1#

一些最小的示例代码将有助于复制您的问题。
下面是我解决这个问题的方法:

  1. from pyspark.sql import SparkSession
  2. import pyspark.sql.functions as F
  3. spark = SparkSession.builder.getOrCreate()
  4. df = spark.createDataFrame([("""
  5. text:ABC12637-XYZ line_number:121-ABC:JJ11
  6. header:3AXYZ166-LMN line_number:3112-GHI:3A1
  7. """,)], ['str'])
  8. df.select("str", F.expr(r"regexp_extract_all(str, r'line_number:(\d+)-', 1)").alias('extracted')).show()

字符串
它产生:

  1. +--------------------+-----------+
  2. | str| extracted|
  3. +--------------------+-----------+
  4. |\ntext:ABC12637-X...|[121, 3112]|
  5. +--------------------+-----------+


更新:

  1. df.withColumn('extracted_regex', F.expr(r"regexp_extract_all(str, r'line_number:(\d+)-', 1)")).show()
  2. +--------------------+---------------+
  3. | str|extracted_regex|
  4. +--------------------+---------------+
  5. |\ntext:ABC12637-X...| [121, 3112]|
  6. +--------------------+---------------+


使用Python 3.12和Spark 3.5

  1. >>> spark.version
  2. '3.5.0'

展开查看全部

相关问题