Hầu hết mọi người đã đọc tệp CSV dưới dạng nguồn khi triển khai Spark và thậm chí spark cung cấp hỗ trợ trực tiếp để đọc tệp CSV nhưng vì tôi bắt buộc phải đọc tệp excel vì nhà cung cấp nguồn của tôi nghiêm ngặt không cung cấp CSV nên tôi có nhiệm vụ tìm một
Sau khi tìm kiếm trên google, tôi không thể tìm thấy bất kỳ câu trả lời trực tiếp nào nhưng nghĩ đến việc viết blog này để những người muốn đọc tệp Excel trong spark (Python) có thể đọc blog này và thực hiện nhanh chóng
Vì vậy, tôi sẽ giải thích từng bước một cách khôn ngoan về cách đọc tệp excel trong pyspark (DB Az)
Thư viện cần thiết để đọc tệp excel là “crealytics/spark-excel” thư viện này giúp tôi tiết kiệm rất nhiều thời gian để đọc excel và làm cho cuộc sống của tôi hạnh phúc hơn. Đây là một cộng đồng tích cực đang quản lý plugin này
Bạn có thể thấy lạ nhưng trang GIT hiển thị mẫu mã trong Scala và tất cả tài liệu dành cho Scala chứ không phải một dòng mã nào cho pyspark, nhưng tôi đã thử vận may và nó hoạt động với tôi trong pyspark
Thư viện này yêu cầu Spark 2. 0+
Bạn có thể liên kết với thư viện này trong chương trình của mình theo tọa độ sau
quy mô 2. 12____0_______Scala 2. 11____1_______Cài đặt thư viện trong cụm DB trong Az
- Chuyển đến các cụm trong không gian làm việc của DB và nhấp vào cụm bạn muốn cài đặt thư viện, sau khi nhấp vào tên cụm, bạn sẽ đến trang chi tiết cụm, chuyển sang tab Thư viện và nhấp vào “Cài đặt mới”
tab Thư viện cụm
- 1 Sau khi nhấp vào cài đặt thư viện, bạn sẽ nhận được cửa sổ bật lên, bạn cần nhấp vào Maven và cung cấp các tọa độ sau
com. crealytics. spark-excel_2. 12. 0. 13. 5
Hoặc nếu muốn, bạn có thể nhấp vào Tìm kiếm Gói và cửa sổ bật lên sẽ mở ra có tên là “Tìm kiếm Gói”. Từ danh sách thả xuống, chọn “Maven Central” và nhập “com. crealytics” trong hộp tìm kiếm văn bản và chọn phiên bản mới nhất của plugin hoặc theo phiên bản scala của bạn trong Cụm trên DB Az. Tôi đang sử dụng “spark-excel_2. 12” theo phiên bản scala của tôi trên cụm. Khi bạn nhấp vào chọn, nó sẽ điền các tọa độ như trong ảnh chụp màn hình ở trên và sau đó nhấp vào cài đặt
lựa chọn maven crealytics
Khi thư viện của bạn được cài đặt, nó sẽ được hiển thị như bên dưới
Chúng ta đã sẵn sàng bắt đầu viết mã để đọc dữ liệu từ tệp excel
2. Mã trong sổ ghi chép DB để đọc tệp excel
Mã mẫu
#đường dẫn tệp dữ liệu mẫu
sampleDataFilePath = “dbfs. /FileStore/tables/sample_xls_file_for_testing-1. xls”#flags cần thiết để đọc excel
isHeaderOn = “đúng”
isInferSchemaOn = “sai”# địa chỉ trang tính trong excel
sample1Address = “'sample1'. A1”
sample2Address = “'sample2'. A1”#đọc file excel
sample1DF = tia lửa. đọc. định dạng(“com. crealytics. tia lửa. xuất sắc”) \
tùy chọn ("tiêu đề", isHeaderOn) \
tùy chọn(“inferSchema”, isInferSchemaOn) \
tùy chọn(“treatEmptyValuesAsNulls”, “false”) \
tùy chọn ("dataAddress", sample1Address) \
tải (mẫuDataFilePath)
hiển thị (sample1DF)
Đoạn mã trên sẽ đọc tất cả dữ liệu từ trang tính “sample1” từ tệp xls mẫu bắt đầu từ ô A1 đến tất cả các cột
Bạn cũng có thể chỉ định phạm vi ô trong mã, trong trường hợp bạn chỉ muốn đọc các ô cụ thể
Mã mẫu để đọc cho phạm vi ô cụ thể
#đường dẫn tệp dữ liệu mẫu
sampleDataFilePath = “dbfs. /FileStore/tables/sample_xls_file_for_testing-1. xls”#flags cần thiết để đọc excel
isHeaderOn = “đúng”
isInferSchemaOn = “sai”# địa chỉ trang tính trong excel
sample1Address = “'sample1'. A1. P35”
sample2Address = “'sample2'. A1. P35”#đọc file excel
sample1DF = tia lửa. đọc. định dạng(“com. crealytics. tia lửa. xuất sắc”) \
tùy chọn ("tiêu đề", isHeaderOn) \
tùy chọn(“inferSchema”, isInferSchemaOn) \
tùy chọn(“treatEmptyValuesAsNulls”, “false”) \
tùy chọn ("dataAddress", sample1Address) \
tải (mẫuDataFilePath)
hiển thị (sample1DF)
Địa chỉ dữ liệu
Như bạn có thể thấy trong các ví dụ trên, vị trí của dữ liệu để đọc hoặc ghi có thể được chỉ định bằng tùy chọn dataAddress. Hiện tại các kiểu địa chỉ sau được hỗ trợ
Phương pháp này chỉ nên được sử dụng nếu DataFrame kết quả dự kiến sẽ nhỏ, vì tất cả dữ liệu được tải vào bộ nhớ của trình điều khiển
Để ghi một đối tượng vào Excel. xlsx, chỉ cần chỉ định tên tệp đích. Để ghi vào nhiều trang tính, cần tạo một đối tượng ExcelWriter với tên tệp đích và chỉ định một trang tính trong tệp để ghi vào
Có thể ghi nhiều trang tính bằng cách chỉ định sheet_name duy nhất. Với tất cả dữ liệu được ghi vào tệp, cần lưu các thay đổi. Lưu ý rằng việc tạo đối tượng ExcelWriter với tên tệp đã tồn tại sẽ dẫn đến nội dung của tệp hiện có bị xóa
Tham sốsexcel_writerstr hoặc đối tượng ExcelWriterĐường dẫn tệp hoặc ExcelWriter hiện có
sheet_namestr, mặc định là ‘Sheet1’Tên của trang tính sẽ chứa DataFrame
na_repstr, mặc định ‘’Thiếu biểu diễn dữ liệu
float_formatstr, tùy chọnĐịnh dạng chuỗi cho số dấu phẩy động. Ví dụ: float_format="%%.2f" sẽ định dạng 0. 1234 đến 0. 12
cột hoặc danh sách str, tùy chọnCác cột để viết
headerbool hoặc danh sách str, mặc định là TrueViết tên các cột. Nếu một danh sách chuỗi được đưa ra, nó được coi là bí danh cho tên cột
indexbool, mặc định là TrueViết tên hàng (chỉ mục)
index_labelstr hoặc trình tự, tùy chọnNhãn cột cho (các) cột chỉ mục nếu muốn. Nếu không được chỉ định và tiêu đề và chỉ mục là True, thì tên chỉ mục được sử dụng. Một chuỗi sẽ được cung cấp nếu DataFrame sử dụng MultiIndex
startrowint, mặc định 0Hàng ô trên bên trái để kết xuất khung dữ liệu
startcolint, mặc định 0Cột ô phía trên bên trái để kết xuất khung dữ liệu
động cơ, tùy chọnCông cụ viết để sử dụng, 'openpyxl' hoặc 'xlsxwriter'. Bạn cũng có thể thiết lập điều này thông qua các tùy chọn io.excel.xlsx.writer, io.excel.xls.writer và io.excel.xlsm.writer
merge_cellsbool, mặc định là TrueViết MultiIndex và Hierarchical Rows dưới dạng các ô được hợp nhất
mã hóa, tùy chọnMã hóa tệp excel kết quả. Chỉ cần thiết cho xlwt, các nhà văn khác hỗ trợ unicode nguyên bản
inf_repstr, 'inf' mặc địnhBiểu diễn cho vô cực (không có biểu diễn riêng cho vô cực trong Excel)
verbosebool, mặc định là TrueHiển thị thêm thông tin trong nhật ký lỗi
freeze_panestuple của int (độ dài 2), tùy chọnChỉ định hàng dưới cùng và cột ngoài cùng bên phải dựa trên một nền tảng sẽ được cố định
ghi chú
Khi sổ làm việc đã được lưu, không thể ghi thêm dữ liệu nếu không viết lại toàn bộ sổ làm việc
ví dụ
Tạo, ghi và lưu sổ làm việc
>>> df1 = ps.DataFrame([['a', 'b'], ['c', 'd']], .. index=['row 1', 'row 2'], .. columns=['col 1', 'col 2']) >>> df1.to_excel("output.xlsx")
Để chỉ định tên trang tính
>>> df1.to_excel("output.xlsx") >>> df1.to_excel("output.xlsx", .. sheet_name='Sheet_name_1')
Nếu bạn muốn ghi vào nhiều trang tính trong sổ làm việc, cần chỉ định đối tượng ExcelWriter
>>> with pd.ExcelWriter('output.xlsx') as writer: .. df1.to_excel(writer, sheet_name='Sheet_name_1') .. df2.to_excel(writer, sheet_name='Sheet_name_2')
Để đặt thư viện được sử dụng để ghi tệp Excel, bạn có thể nhập từ khóa engine (công cụ mặc định được chọn tự động tùy thuộc vào phần mở rộng của tệp)