Tôi thấy mình muốn làm phẳng một mảng các mảng trong khi viết một số mã Python vào đầu giờ chiều nay và lười biếng với nỗ lực đầu tiên của tôi liên quan đến việc xây dựng mảng phẳng bằng tay: Show
Nếu chúng ta chạy mà chúng ta sẽ thấy đầu ra này:
Điều tôi thực sự tìm kiếm là Python tương đương với hàm phẳng mà tôi đã học có thể đạt được trong Python với cách hiểu danh sách như vậy:
Chúng tôi cũng có thể chọn sử dụng itertools trong trường hợp chúng tôi có mã sau đây:
Sau đó, chúng ta có thể đơn giản hóa cách tiếp cận này một chút bằng cách gói nó trong một chức năng 'phẳng':
Tôi nghĩ rằng cách tiếp cận hiểu danh sách vẫn hoạt động nhưng tôi cần xem xét itertools nhiều hơn - có vẻ như nó có thể hoạt động tốt cho các hoạt động danh sách khác.
5 hữu ích 0 bình luận 3.8k xem chia sẻ Theo mặc định, hành động thu thập () của PySpark DataFrame trả về kết quả trong Loại hàng () nhưng không phải danh sách, do đó bạn cần chuyển đổi trước bằng cách sử dụng chuyển đổi map () hoặc xử lý sau để chuyển đổi Cột PySpark DataFrame thành Danh sách Python, có nhiều các cách để chuyển đổi cột DataFrame (tất cả các giá trị) sang Python liệt kê một số cách tiếp cận hoạt động tốt hơn, một số phương pháp không thực hiện tốt hơn, do đó tốt hơn là bạn nên biết tất cả các cách. Một danh sách là một cấu trúc dữ liệu trong Python chứa một tập hợp các mục. Các mục danh sách được đặt trong dấu ngoặc vuông, như thế này [data1, data2, data3]. from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[1]") .appName('SignalFix.com') .getOrCreate() data = [("James","Smith","USA","CA"),("Michael","Rose","USA","NY"), ("Robert","Williams","USA","CA"),("Maria","Jones","USA","FL") ] columns=["firstname","lastname","country","state"] df=spark.createDataFrame(data=data,schema=columns) print(df.collect()) #Outputs below Row Type #[Row(firstname="James", lastname="Smith", country='USA', state="CA"), Row(firstname="Michael", #lastname="Rose", country='USA', state="NY"), Row(firstname="Robert", lastname="Williams", country='USA', #state="CA"), Row(firstname="Maria", lastname="Jones", country='USA', state="FL")] Ghi chú: Hành động thu thập () thu thập tất cả các hàng từ tất cả các công nhân vào Trình điều khiển PySpark, nếu dữ liệu của bạn lớn và không vừa trong bộ nhớ Trình điều khiển, nó sẽ trả về lỗi Outofmemory, do đó, hãy cẩn thận khi bạn sử dụng thu thập.
Như bạn thấy đầu ra ở trên, PySpark DataFrame collect () trả về Loại hàng, do đó, để chuyển đổi Cột DataFrame thành Danh sách Python, trước tiên, bạn cần chọn cột DataFrame bạn muốn bằng cách sử dụng biểu thức lambda rdd.map () và sau đó thu thập DataFrame . Trong ví dụ dưới đây, tôi đang trích xuất cột thứ 4 (chỉ mục thứ 3) từ DataFrame vào danh sách Python. states1=df.rdd.map(lambda x: x[3]).collect() print(states1) #['CA', 'NY', 'CA', 'FL'] 1.1 Xóa các bản sao khỏi danh sáchĐoạn mã trên chuyển đổi cột DataFrame thành một danh sách Python, tuy nhiên, nó chứa các giá trị trùng lặp, bạn có thể xóa các bản sao trước hoặc sau khi chuyển đổi thành Danh sách. Ví dụ dưới đây loại bỏ các bản sao khỏi danh sách Python sau khi chuyển đổi. #Remove duplicates after converting to List from collections import OrderedDict res = list(OrderedDict.fromkeys(states1)) print(res) #['CA', 'NY', 'FL'] 2. Tên cột giới thiệu bạn muốn trích xuấtĐây là một giải pháp thay thế khác để lấy cột DataFrame làm Danh sách Python bằng cách tham chiếu tên cột từ Loại hàng. states2=df.rdd.map(lambda x: x.state).collect() print(states2) #['CA', 'NY', 'CA', 'FL'] 3. Sử dụng phép chuyển đổi flatMap ()Bạn cũng có thể lấy danh sách từ DataFrame bằng cách sử dụng phép biến đổi PySpark flatMap () states4=df.select(df.state).rdd.flatMap(lambda x: x).collect() print(states4) #['CA', 'NY', 'CA', 'FL'] 4. Chuyển đổi sang danh sách Python bằng PandasVí dụ dưới đây Chuyển đổi PySpark DataFrame thành Gấu trúc và sử dụng gấu trúc để lấy cột bạn muốn dưới dạng Danh sách Python. states5=df.select(df.state).toPandas()['state'] states6=list(states5) print(states6) #['CA', 'NY', 'CA', 'FL'] 5. Lấy cột trong loại hàngTrong trường hợp nếu bạn muốn thu thập cột DataFrame trong Loại Hàng, hãy sử dụng ví dụ dưới đây. states3=df.select(df.state).collect() print(states3) #[Row(state="CA"), Row(state="NY"), Row(state="CA"), Row(state="FL")] 6. Chuyển đổi nhiều cột thành danh sách PythonpandDF=df.select(df.state,df.firstname).toPandas() print(list(pandDF['state'])) print(list(pandDF['firstname'])) #['CA', 'NY', 'CA', 'FL'] #['James', 'Michael', 'Robert', 'Maria'] Sự kết luậnTrong bài viết này, tôi đã giải thích một số cách để lấy Danh sách Python từ DataFrame với ví dụ. hy vọng những điều này là hữu ích. Học vui vẻ !! Người giới thiệu |