-1

데이터 프레임을 조 변경하고 스칼라를 사용하여 외부 테이블로 저장해야합니다. 피봇을 사용했지만 행운을 얻지 않으려 고 시도한 경우 DF의 모든 열을 sample_value 열과 해당 값으로 조 변경해야합니다. 내 DF열을 스칼라의 행으로 변환

A B C D 
1 2 3 4 
1 2 3 4 
2 3 4 1 
2 3 4 1 

이 최종 출력을 필요 : 나는 당신의 질문에 대답 진행하기 전에

col_name sample_value1 sample_value2 
A   1    2 
B   2    3 
C   3    4 
D   4    1 
+0

해야 원하는 결과를 얻을 수 있습니다 '? 하나의 DF 열이 단일 값으로 구성되면 어떻게됩니까? 더 많은 예가 당신이 어떤 변형을했는지 이해하는 데 필요합니다. – jwvh

+0

왜'pyspark' 태그가 ?? – desertnaut

+0

@jwvh 무엇이 가치일지도 모른다, 완전한 것은 변형되어야한다. 행과 행과 열의 열입니다. – maduri

답변

0

, 나는 이것이 매우 비싼 솔루션입니다 및 사용되어야한다는 사실을 강조하고 싶습니다 대체물이 없을 때만.

감안할 당신은에 대한 headernames에 대한 new 열을 얻기 위해 다음과 같은 작업을 수행 할 수 dataframe

+---+---+---+---+ 
|A |B |C |D | 
+---+---+---+---+ 
|1 |2 |3 |4 | 
|1 |2 |3 |4 | 
|2 |3 |4 |1 | 
|2 |3 |4 |1 | 
+---+---+---+---+ 

로 최종 dataframe 당신에게

+---+---+---+---+-------------+ 
|A |B |C |D |new   | 
+---+---+---+---+-------------+ 
|1 |2 |3 |4 |sample_value1| 
|2 |3 |4 |1 |sample_value2| 
+---+---+---+---+-------------+ 

을 제공해야하는

import org.apache.spark.sql.functions.lit 
import org.apache.spark.sql.functions.concat 
import org.apache.spark.sql.functions.rank 
import org.apache.spark.sql.expressions.Window 
val tempdf = df.distinct().withColumn("new", concat(lit("sample_value"), rank.over(Window.partitionBy().orderBy("A")))).cache() 

로 이제 마지막 비싼 부분은을 사용하는 것입니다. 열이`D` 값`6,7,8,9가있는 경우, union, withColumn, groupByaggregations 당신이 원하는 무엇 결과

val firstCol = df.schema.fieldNames.head 
val restOfCol = df.schema.fieldNames.tail 
import org.apache.spark.sql.functions.first 
var finaldf = tempdf.groupBy().pivot("new").agg(first(firstCol)).withColumn("col_name", lit(firstCol)) 

for(column <- restOfCol) { 
    finaldf = finaldf.union(tempdf.groupBy().pivot("new").agg(first(column)).withColumn("col_name", lit(column))) 
} 

finaldf.show(false) 

finaldf

+-------------+-------------+--------+ 
|sample_value1|sample_value2|col_name| 
+-------------+-------------+--------+ 
|1   |2   |A  | 
|2   |3   |B  | 
|3   |4   |C  | 
|4   |1   |D  | 
+-------------+-------------+--------+