2016-06-02 20 views
18

Tôi làm cách nào để sử dụng collect_set hoặc collect_list trên khung dữ liệu sau groupby. ví dụ: df.groupby('key').collect_set('values'). Tôi gặp lỗi: AttributeError: 'GroupedData' object has no attribute 'collect_set' pyspark collect_set hoặc collect_list với groupby

+1

Bạn có thể đăng một số dữ liệu mẫu sẽ ném lỗi này để chúng tôi có thể gỡ lỗi vấn đề của bạn không? –

Trả lời

25

Bạn cần sử dụng agg. Ví dụ:

from pyspark import SparkContext 
from pyspark.sql import HiveContext 
from pyspark.sql import functions as F 

sc = SparkContext("local") 

sqlContext = HiveContext(sc) 

df = sqlContext.createDataFrame([ 
    ("a", None, None), 
    ("a", "code1", None), 
    ("a", "code2", "name2"), 
], ["id", "code", "name"]) 

df.show() 

+---+-----+-----+ 
| id| code| name| 
+---+-----+-----+ 
| a| null| null| 
| a|code1| null| 
| a|code2|name2| 
+---+-----+-----+ 

Lưu ý ở trên bạn phải tạo HiveContext. Xem https://stackoverflow.com/a/35529093/690430 để xử lý các phiên bản Spark khác nhau.

(df 
    .groupby("id") 
    .agg(F.collect_set("code"), 
     F.collect_list("name")) 
    .show()) 

+---+-----------------+-----------------+ 
| id|collect_set(code)|collect_list(name)| 
+---+-----------------+-----------------+ 
| a| [code1, code2]|   [name2]| 
+---+-----------------+-----------------+