[HADOOP] pyspark 동적 컬럼 계산
HADOOPpyspark 동적 컬럼 계산
아래는 내 스파크 데이터 프레임입니다.
a b c
1 3 4
2 0 0
4 1 0
2 2 0
내 출력은 다음과 같아야합니다.
a b c
1 3 4
2 0 2
4 1 -1
2 2 3
식은 prev (c) -b + a, 즉 4-2 + 0 = 2 및 2-4 + 1 = -1입니다.
아무도이 장애물을 건너도록 도와 줄 수 있습니까?
해결법
-
==============================
1.
from pyspark.sql.functions import lag, udf from pyspark.sql.types import IntegerType from pyspark.sql.window import Window numbers = [[1,2,3],[2,3,4],[3,4,5],[5,6,7]] df = sc.parallelize(numbers).toDF(['a','b','c']) df.show() w = Window().partitionBy().orderBy('a') calculate = udf(lambda a,b,c:a-b+c,IntegerType()) df = df.withColumn('result', lag("a").over(w)-df.b+df.c) df.show() +---+---+---+ | a| b| c| +---+---+---+ | 1| 2| 3| | 2| 3| 4| | 3| 4| 5| | 5| 6| 7| +---+---+---+ +---+---+---+------+ | a| b| c|result| +---+---+---+------+ | 1| 2| 3| null| | 2| 3| 4| 2| | 3| 4| 5| 3| | 5| 6| 7| 4| +---+---+---+------+
-
==============================
2.희망이 도움이 될 수 있습니다!
희망이 도움이 될 수 있습니다!
import pyspark.sql.functions as f from pyspark.sql.window import Window df = sc.parallelize([ [1,3], [2,0], [4,1], [2,2] ]).toDF(('a', 'b')) df1 = df.withColumn("row_id", f.monotonically_increasing_id()) w = Window.partitionBy().orderBy(f.col("row_id")) df1 = df1.withColumn("c_temp", f.when(f.col("row_id")==0, f.lit(4)).otherwise(- f.col("a") + f.col("b"))) df1 = df1.withColumn("c", f.sum(f.col("c_temp")).over(w)).drop("c_temp","row_id") df1.show()
출력은 다음과 같습니다.
+---+---+---+ | a| b| c| +---+---+---+ | 1| 3| 4| | 2| 0| 2| | 4| 1| -1| | 2| 2| -1| +---+---+---+
from https://stackoverflow.com/questions/46304475/pyspark-dynamic-column-computation by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 셸 모드의 SemanticException (0) | 2019.07.04 |
---|---|
[HADOOP] Spark Streaming 및 Phoenix Kerberos 문제 (0) | 2019.07.04 |
[HADOOP] cumulocity의 java 클라이언트가 이벤트를 수신하는 방법은 무엇입니까? (0) | 2019.07.04 |
[HADOOP] Hadoop 작업에 클래스가 없습니다. (0) | 2019.07.04 |
[HADOOP] Macos Hadoop 3.1.1 - namenode를 시작하지 못했습니다. java.io.IOException : 행을 구문 분석 할 수 없습니다 : "파일 시스템 1024 블록 사용 가능 용량이 마운트 됨" (0) | 2019.07.04 |