Giả sử chúng ta đang làm việc với các đại diện sau đây của dữ liệu (hai cột, k
và v
, nơi k
chứa ba mục, hai độc đáo:
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Với dataframe Pandas:
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
Trả lại một số ndarray
, tức là array(['foo', 'bar'], dtype=object)
Bạn đã yêu cầu "pyspark dataframe thay thế cho gấu trúc df ['col']. unique()". Bây giờ, do dataframe Spark sau:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
Nếu bạn muốn cùng kết quả từ Spark, tức là một ndarray
, sử dụng toPandas()
:
s_df.toPandas()['k'].unique()
Ngoài ra, nếu bạn không cần một ndarray
cụ thể và chỉ muốn danh sách các giá trị duy nhất của cột k
:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
Cuối cùng, bạn cũng có thể sử dụng danh sách hiểu như sau:
[i.k for i in s_df.select('k').distinct().collect()]
Hi xoáy, bản đồ cuối cùng dòng mã riêng biệt()() không làm việc cho tôi. Lỗi: AttributeError: đối tượng 'DataFrame' không có thuộc tính 'map'. Tôi đang trên tia lửa 2.0. Và toPandas điều, tôi sẽ không nói nó là một thay thế, nó chuyển đổi tia lửa dataframe để pandas dataframe đầu tiên sau đó làm hoạt động gấu trúc trên nó. – Satya
Xin chào satya. Chỉ cần cập nhật câu trả lời bằng cách thêm lệnh '.rdd' sau' distinct() '. Nó hoạt động mà không có điều đó trong Spark 1.6.2, nhưng tôi vừa xác nhận rằng câu trả lời đã chỉnh sửa cũng hoạt động trong Spark 2.0.0. – eddies
cảm ơn rất nhiều, nó hoạt động ... – Satya