【问题标题】:How to extract value after a particular string in scala (spark)?如何在scala(spark)中的特定字符串之后提取值?
【发布时间】:2019-03-16 03:36:51
【问题描述】:

我有一个带有 Column 的数据框:

df =

itemType                   count
it_shampoo                  5
it_books                    5
it_mm                       5
{it_mm}                     5
it_books it_books           5
{=it_books} it_books        5

我需要得到:

itemType                   count
it_shampoo                  5
it_books                    5
it_mm                       5
it_mm                       5
it_books                    5
it_books                    5

如何提取将it_books it_books{=it_books} it_books 替换为it_books。项目类型将始终跟随it_

【问题讨论】:

    标签: regex scala apache-spark dataframe


    【解决方案1】:

    尝试将正则表达式 ^.*?(it_[\w]+).*$ 替换为 itemType 并替换为第一个捕获的组 $1

    Regex

    【讨论】:

    • 你的正则表达式对我有用。我使用的代码是val df2 = df.withColumn("itemType", regexp_extract($"itemType","""^.*?(it_[\w]+).*$""",1))
    【解决方案2】:

    下面的正则表达式也有效

    scala> val df = Seq(("it_shampoo",5),
         | ("it_books",5),
         | ("it_mm",5),
         | ("{it_mm}",5),
         | ("it_books it_books",5),
         | ("{=it_books} it_books",5)).toDF("itemType","count")
    df: org.apache.spark.sql.DataFrame = [itemType: string, count: int]
    
    scala> df.select( regexp_replace('itemtype,""".*\b(\S+)\b(.*)$""", "$1").as("replaced"),'count).show
    +----------+-----+
    |  replaced|count|
    +----------+-----+
    |it_shampoo|    5|
    |  it_books|    5|
    |     it_mm|    5|
    |     it_mm|    5|
    |  it_books|    5|
    |  it_books|    5|
    +----------+-----+
    
    
    scala>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多