[SCALA] 아파치 스파크는 기존 DataFrame에 "CASE ... ELSE ..."계산 된 열을 추가
SCALA아파치 스파크는 기존 DataFrame에 "CASE ... ELSE ..."계산 된 열을 추가
나는 스칼라 API를 사용하여 기존 DataFrame에 열을 계산 된 "ELSE ... CASE"을 추가하기 위해 노력하고있어. dataframe 시작 :
color
Red
Green
Blue
원하는 dataframe (SQL 구문 : CASE 색 == 그린 THEN BOOL AS 1 ELSE 0 END)
color bool
Red 0
Green 1
Blue 0
어떻게하면이 논리를 구현해야합니까?
해결법
-
==============================
1.곧 SPARK 1.4.0 릴리스 (며칠에 발표해야한다). 당신은 때 / 다른 구문을 사용할 수 있습니다 :
곧 SPARK 1.4.0 릴리스 (며칠에 발표해야한다). 당신은 때 / 다른 구문을 사용할 수 있습니다 :
// Create the dataframe val df = Seq("Red", "Green", "Blue").map(Tuple1.apply).toDF("color") // Use when/otherwise syntax val df1 = df.withColumn("Green_Ind", when($"color" === "Green", 1).otherwise(0))
당신이 SPARK 1.3.0을 사용하는 경우에는 UDF를 사용하도록 선택할 수 있습니다 :
// Define the UDF val isGreen = udf((color: String) => { if (color == "Green") 1 else 0 }) val df2 = df.withColumn("Green_Ind", isGreen($"color"))
-
==============================
2.스파크 1.5.0에서 : 당신은 또한 SQL 구문 EXPR 기능을 사용할 수 있습니다
스파크 1.5.0에서 : 당신은 또한 SQL 구문 EXPR 기능을 사용할 수 있습니다
val df3 = df.withColumn("Green_Ind", expr("case when color = 'green' then 1 else 0 end"))
또는 일반 스파크-SQL
df.registerTempTable("data") val df4 = sql(""" select *, case when color = 'green' then 1 else 0 end as Green_ind from data """)
-
==============================
3.나는 이것을 찾았다:
나는 이것을 찾았다:
https://issues.apache.org/jira/browse/SPARK-3813
스파크 2.1.0에 나를 위해 일한 :
import sqlContext._ val rdd = sc.parallelize((1 to 100).map(i => Record(i, s"val_$i"))) rdd.registerTempTable("records") println("Result of SELECT *:") sql("SELECT case key when '93' then 'ravi' else key end FROM records").collect()
-
==============================
4.내가 지금 여기에 오랫동안 찾고 있던 것은 다른 자바 사용자를위한 부산물 그룹 SPARK 2.1 자바의 예입니다.
내가 지금 여기에 오랫동안 찾고 있던 것은 다른 자바 사용자를위한 부산물 그룹 SPARK 2.1 자바의 예입니다.
import static org.apache.spark.sql.functions.*; //... Column uniqTrue = col("uniq").equalTo(true); Column uniqFalse = col("uniq").equalTo(false); Column testModeFalse = col("testMode").equalTo(false); Column testModeTrue = col("testMode").equalTo(true); Dataset<Row> x = basicEventDataset .groupBy(col(group_field)) .agg( sum(when((testModeTrue).and(uniqTrue), 1).otherwise(0)).as("tt"), sum(when((testModeFalse).and(uniqTrue), 1).otherwise(0)).as("ft"), sum(when((testModeTrue).and(uniqFalse), 1).otherwise(0)).as("tf"), sum(when((testModeFalse).and(uniqFalse), 1).otherwise(0)).as("ff") );
from https://stackoverflow.com/questions/30783517/apache-spark-add-an-case-when-else-calculated-column-to-an-existing-d by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크를 사용하여 간헐적 시간 제한 예외 (0) | 2019.11.21 |
---|---|
[SCALA] 어떻게 스칼라 반사를 통해 기본 매개 변수 값에 액세스합니까? (0) | 2019.11.21 |
[SCALA] 어떻게 오른쪽 연관 중위 연산자를 만드는 방법? (0) | 2019.11.21 |
[SCALA] 서열에서 만족 조건 X 그 첫 번째 요소를 찾기 (0) | 2019.11.21 |
[SCALA] 어떻게 불변 인 Set 비교 방법으로 사용되는 사용자 정의 평등 작업을 정의 할 수 있습니다 (0) | 2019.11.21 |