, 나는 이것이 매우 비싼 솔루션입니다 및 사용되어야한다는 사실을 강조하고 싶습니다 대체물이 없을 때만.
감안할 당신은에 대한 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
,
groupBy
및
aggregations
당신이 원하는 무엇 결과
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 |
+-------------+-------------+--------+
해야 원하는 결과를 얻을 수 있습니다 '? 하나의 DF 열이 단일 값으로 구성되면 어떻게됩니까? 더 많은 예가 당신이 어떤 변형을했는지 이해하는 데 필요합니다. – jwvh
왜'pyspark' 태그가 ?? – desertnaut
@jwvh 무엇이 가치일지도 모른다, 완전한 것은 변형되어야한다. 행과 행과 열의 열입니다. – maduri