2016-11-05 4 views
0

스파크를 사용하여 데이터를 재구성하는 데 문제가 있습니다. 원래 데이터는 다음과 같습니다PySpark의 스파크 피벗 문자열

+----+------+-----+-----+ 
| ID| VAR_1|VAR_2|VAR_3| 
+----+------+-----+-----+ 
|ID_1|Butter|Toast| Ham| 
|ID_2| Jam|Toast| Egg| 
+----+------+-----+-----+ 

내 생각이 사용하는 것이었다 :

df = sqlContext.createDataFrame([ 
    ("ID_1", "VAR_1", "Butter"), 
    ("ID_1", "VAR_2", "Toast"), 
    ("ID_1", "VAR_3", "Ham"), 
    ("ID_2", "VAR_1", "Jam"), 
    ("ID_2", "VAR_2", "Toast"), 
    ("ID_2", "VAR_3", "Egg"), 
], ["ID", "VAR", "VAL"]) 

>>> df.show() 
+----+-----+------+ 
| ID| VAR| VAL| 
+----+-----+------+ 
|ID_1|VAR_1|Butter| 
|ID_1|VAR_2| Toast| 
|ID_1|VAR_3| Ham| 
|ID_2|VAR_1| Jam| 
|ID_2|VAR_2| Toast| 
|ID_2|VAR_3| Egg| 
+----+-----+------+ 

이 내가 달성하려고 구조

df.groupBy("ID").pivot("VAR").show() 

는하지만 다음과 같은 오류가 발생합니다 :

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'GroupedData' object has no attribute 'show' 

의견이 있습니다. 감사!

답변

1

피벗() 후에 집계를 추가해야합니다. 각각의 ID ("ID", "VAR") 쌍에 "VAL"이 하나만있는 것으로 확인되면 first()를 사용할 수 있습니다.

from pyspark.sql import functions as f 

result = df.groupBy("ID").pivot("VAR").agg(f.first("VAL")) 
result.show() 

+----+------+-----+-----+ 
| ID| VAR_1|VAR_2|VAR_3| 
+----+------+-----+-----+ 
|ID_1|Butter|Toast| Ham| 
|ID_2| Jam|Toast| Egg| 
+----+------+-----+-----+ 
+0

이것은 유효한 답변 일 수 있습니다. 이유는 무엇입니까? ? – eliasah