[SCALA] 기존 DataFrame 사용 withColumn에 두 개의 열을 추가
SCALA기존 DataFrame 사용 withColumn에 두 개의 열을 추가
나는 약간 열이있는 DataFrame 있습니다. 지금은 기존 DataFrame에 두 개의 열을 추가하고 싶습니다.
현재 내가 DataFrame이 사용 withColumn 방법을하고있는 중이 야.
예를 들어 :
df.withColumn("newColumn1", udf(col("somecolumn")))
.withColumn("newColumn2", udf(col("somecolumn")))
실제로 I는 어레이 [문자열]을 사용하여 단일 UDF 방법 모두 newcoOlumn 값을 반환 할 수있다. 그러나 현재이 내가 그 일을하고 방법이다.
어쨌든, 나는 효과적으로 할 수 있습니까? 좋은 옵션이 여기에 폭발한다 사용하고 계십니까?
내가 사용은 폭발에, 내가 한 번 withColumn를 사용해야 할 경우에도, 그 다음 다음 폭발이 더 많은 열을 생성하여, Array와 같은 열 값 [문자열]을 반환합니다.
어느 쪽이 효과적이다? 또는 대안이 무엇입니까?
해결법
-
==============================
1.AFAIK 당신이 (각각의 새로운 칼럼에 대해 한 번)를 두 번 withColumn를 호출해야합니다. 당신의 UDF는 계산 비용이 높은 경우에, 당신은 예를 들어, 결과를 "풀기"다음 임시 열에서 "복잡한"결과를 저장하고로 두 번 전화를 피할 수 있습니다 (배열 요소에 대한 액세스를 제공) 칼럼의 적용 방법을 사용. 때때로 중간 결과를 캐시하는 데 필요한 주 때로는 필요하지 않을 것, (UDF에 포장 풀기 동안 두 번 행마다 호출되는 것을 방지하기 위해). 이것은 계획을 최적화하는 방법 스파크에 의존하는 것 같다 :
AFAIK 당신이 (각각의 새로운 칼럼에 대해 한 번)를 두 번 withColumn를 호출해야합니다. 당신의 UDF는 계산 비용이 높은 경우에, 당신은 예를 들어, 결과를 "풀기"다음 임시 열에서 "복잡한"결과를 저장하고로 두 번 전화를 피할 수 있습니다 (배열 요소에 대한 액세스를 제공) 칼럼의 적용 방법을 사용. 때때로 중간 결과를 캐시하는 데 필요한 주 때로는 필요하지 않을 것, (UDF에 포장 풀기 동안 두 번 행마다 호출되는 것을 방지하기 위해). 이것은 계획을 최적화하는 방법 스파크에 의존하는 것 같다 :
val myUDf = udf((s:String) => Array(s.toUpperCase(),s.toLowerCase())) val df = sc.parallelize(Seq("Peter","John")).toDF("name") val newDf = df .withColumn("udfResult",myUDf(col("name"))).cache .withColumn("uppercaseColumn", col("udfResult")(0)) .withColumn("lowercaseColumn", col("udfResult")(1)) .drop("udfResult") newDf.show()
제공
+-----+---------------+---------------+ | name|uppercaseColumn|lowercaseColumn| +-----+---------------+---------------+ |Peter| PETER| peter| | John| JOHN| john| +-----+---------------+---------------+
UDF는 튜플을 반환으로, 압축 풀기는 다음과 같이 보일 것이다 :
val newDf = df .withColumn("udfResult",myUDf(col("name"))).cache .withColumn("lowercaseColumn", col("udfResult._1")) .withColumn("uppercaseColumn", col("udfResult._2")) .drop("udfResult")
from https://stackoverflow.com/questions/40959655/adding-two-columns-to-existing-dataframe-using-withcolumn by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라는 바이트 코드를 생성? ASM과 같은 몇 가지 라이브러리를 사용하거나 직접 바이너리 쓰기? (0) | 2019.11.27 |
---|---|
[SCALA] 의 경우의 프로그램 무리에 스칼라 방법 (0) | 2019.11.27 |
[SCALA] 스칼라 스파크 DataFrame : dataFrame.select 여러 열은 열 이름의 순서를 부여 (0) | 2019.11.27 |
[SCALA] Scalatest - 테스트하는 방법에 println (0) | 2019.11.27 |
[SCALA] 스칼라에서; 나는 응용 프로그램의 특성을 사용해야합니까? (0) | 2019.11.27 |