Pyspark đọc excel từ hdfs

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

  1. 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. 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ọn

Các cột để viết

headerbool hoặc danh sách str, mặc định là True

Viế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à True

Viết tên hàng (chỉ mục)

index_labelstr hoặc trình tự, tùy chọn

Nhã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 0

Hàng ô trên bên trái để kết xuất khung dữ liệu

startcolint, mặc định 0

Cột ô phía trên bên trái để kết xuất khung dữ liệu

động cơ, tùy chọn

Cô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.writerio.excel.xlsm.writer

merge_cellsbool, mặc định là True

Viết MultiIndex và Hierarchical Rows dưới dạng các ô được hợp nhất

mã hóa, tùy chọn

Mã 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 định

Biể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à True

Hiển thị thêm thông tin trong nhật ký lỗi

freeze_panestuple của int (độ dài 2), tùy chọn

Chỉ đị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)

Làm cách nào để đọc dữ liệu từ HDFS trong pyspark?

Bước 1. Nhập các mô-đun. Trong trường hợp này, chúng tôi sẽ nhập các mô-đun SQL pyspark và pyspark và tạo một phiên spark như bên dưới. .
Bước 2. Tạo phiên Spark. .
Bước 3. Tạo lược đồ. .
Bước 4. Đọc tệp CSV từ HDFS. .
Bước 5. Để xem lược đồ

Chúng ta có thể đọc Excel trong Pyspark không?

Đọc tệp Excel vào Chuỗi hoặc Khung dữ liệu pandas-on-Spark . Hỗ trợ cả phần mở rộng tệp xls và xlsx từ hệ thống tệp cục bộ hoặc URL. Hỗ trợ tùy chọn đọc một trang tính hoặc danh sách các trang tính. Chuỗi có thể là một URL.

Làm cách nào để đọc tệp CSV từ HDFS bằng pyspark?

Đọc tệp CSV vào khung dữ liệu bằng hàm spark. .
Bước 1. Thiết lập các biến môi trường cho thư viện Pyspark, Java, Spark và python. .
Bước 2. Nhập phiên Spark và khởi tạo nó. .
Bước 3. Chúng tôi đã chứng minh công thức này bằng cách sử dụng “người dùng

Làm cách nào để đọc tệp sàn gỗ từ HDFS bằng pyspark?

Pyspark SQL cung cấp các phương thức để đọc tệp Parquet vào DataFrame và ghi DataFrame vào tệp Parquet, hàm parquet() từ DataFrameReader và DataFrameWriter được sử dụng để đọc và ghi/tạo Parquet . .