[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.당신은 단순히 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.라벨 그냥 문자 그대로 그것은 매우 간단 인 경우 :
라벨 그냥 문자 그대로 그것은 매우 간단 인 경우 :
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, '')"))
from https://stackoverflow.com/questions/45615621/spark-column-string-replace-when-present-in-other-column-row by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 불꽃의 모든 열 / 행 전체를 처리 UDF (0) | 2019.11.18 |
---|---|
[SCALA] 어떻게 CSV 파일에서 스키마를 만들고 파일에 해당 스키마 저장 / 유지하기 위해? (0) | 2019.11.18 |
[SCALA] 스칼라 단일 메소드 인터페이스 구현 (0) | 2019.11.17 |
[SCALA] 매개 변수 값 스칼라 - 스파크 동적으로 호출 GROUPBY 및 AGG (0) | 2019.11.17 |
[SCALA] Scalaz 귀속 [서열] typeclass (0) | 2019.11.17 |