代码之家  ›  专栏  ›  技术社区  ›  user3407267

如何在scala(spark)中提取特定字符串后的值?

  •  0
  • user3407267  · 技术社区  · 6 年前

    测向=

    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_

    2 回复  |  直到 6 年前
        1
  •  1
  •   Nambi_0915    6 年前

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

    Regex

        2
  •  0
  •   stack0114106    6 年前

    下面的正则表达式也适用

    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>