Tôi có danh sách các từ điển lồng nhau, ví dụ: ds = [{'a': {'b': {'c': 1}}}]
và muốn tạo một DataFrame tia lửa từ nó trong khi suy luận lược đồ của từ điển lồng nhau. Sử dụng sqlContext.createDataFrame(ds).printSchema()
mang lại cho tôi sau schemaTạo DataFrame Spark từ từ điển lồng nhau
root
|-- a: map (nullable = true)
| |-- key: string
| |-- value: map (valueContainsNull = true)
| | |-- key: string
| | |-- value: long (valueContainsNull = true)
nhưng những gì tôi cần là
root
|-- a: struct (nullable = true)
| |-- b: struct (nullable = true)
| | |-- c: long (nullable = true)
Giản đồ thứ hai này có thể được tạo ra bằng cách đầu tiên chuyển đổi từ điển để JSON và sau đó tải nó với jsonRDD
như sqlContext.jsonRDD(sc.parallelize([json.dumps(ds[0])])).printSchema()
này. Nhưng điều này sẽ khá cồng kềnh đối với các tệp lớn.
Tôi đã nghĩ về việc chuyển từ điển thành pyspark.sql.Row()
đối tượng hy vọng rằng khung dữ liệu sẽ suy ra lược đồ, nhưng nó không hoạt động khi từ điển có các lược đồ khác nhau (ví dụ: đầu tiên thiếu một số khóa).
Có cách nào khác để thực hiện việc này không? Cảm ơn!
tôi muốn tránh điều đó (xem câu hỏi của tôi). Tôi đã hy vọng có một cách để làm điều đó mà không cần phải tạo RDD từ các bộ từ điển chỉ để có được lược đồ của nó. – Marigold
Xin lỗi vì đã bỏ lỡ đoạn giữa của bạn. Thật không may, tính năng 'lược đồ suy luận từ từ điển' không còn được dùng nữa, tôi hy vọng có một cách khác nữa. – hyim