복붙노트

[SCALA] 스파크 열 문자열 다른 열 (행)에 존재하는 경우 대체

SCALA

스파크 열 문자열 다른 열 (행)에 존재하는 경우 대체

나는 COL2에 존재하는 COL1에서 문자열을 제거 할 것입니다 :

val df = spark.createDataFrame(Seq(
("Hi I heard about Spark", "Spark"),
("I wish Java could use case classes", "Java"),
("Logistic regression models are neat", "models")
)).toDF("sentence", "label")

REGEXP_REPLACE를 사용하거나 심판 번역 : 스파크 기능 API를

val res = df.withColumn("sentence_without_label", regexp_replace 
(col("sentence") , "(?????)", "" ))

그래서 아래와 같이 고해상도의 모습이 :

해결법

  1. ==============================

    1.당신은 단순히 REGEXP_REPLACE을 사용할 수 있습니다

    당신은 단순히 REGEXP_REPLACE을 사용할 수 있습니다

    df5.withColumn("sentence_without_label", regexp_replace($"sentence" , lit($"label"), lit("" )))
    

    또는 당신은 기능 UDF 간단하게 사용할 수 아래로

    val df5 = spark.createDataFrame(Seq(
      ("Hi I heard about Spark", "Spark"),
      ("I wish Java could use case classes", "Java"),
      ("Logistic regression models are neat", "models")
    )).toDF("sentence", "label")
    
    val replace = udf((data: String , rep : String)=>data.replaceAll(rep, ""))
    
    val res = df5.withColumn("sentence_without_label", replace($"sentence" , $"label"))
    
    res.show()
    

    산출:

    +-----------------------------------+------+------------------------------+
    |sentence                           |label |sentence_without_label        |
    +-----------------------------------+------+------------------------------+
    |Hi I heard about Spark             |Spark |Hi I heard about              |
    |I wish Java could use case classes |Java  |I wish  could use case classes|
    |Logistic regression models are neat|models|Logistic regression  are neat |
    +-----------------------------------+------+------------------------------+
    
  2. ==============================

    2.라벨 그냥 문자 그대로 그것은 매우 간단 인 경우 :

    라벨 그냥 문자 그대로 그것은 매우 간단 인 경우 :

    import org.apache.spark.sql.functions._
    
    df.withColumn("sentence_without_label", 
      regexp_replace(col("sentence"), col("label"), lit(""))).show(false)
    
    +-----------------------------------+------+------------------------------+
    |sentence                           |label |sentence_without_label        |
    +-----------------------------------+------+------------------------------+
    |Hi I heard about Spark             |Spark |Hi I heard about              |
    |I wish Java could use case classes |Java  |I wish  could use case classes|
    |Logistic regression models are neat|models|Logistic regression  are neat |
    +-----------------------------------+------+------------------------------+  
    

    스파크 1.6에서는 EXPR과 같은 작업을 수행 할 수 있습니다 :

    df.withColumn(
      "sentence_without_label",
      expr("regexp_replace(sentence, label, '')"))
    
  3. from https://stackoverflow.com/questions/45615621/spark-column-string-replace-when-present-in-other-column-row by cc-by-sa and MIT license