2017-05-26 19 views
5

Tôi có tệp Excel(xlsx and xls) lớn có nhiều trang tính và tôi cần chuyển đổi nó thành RDD hoặc Dataframe để có thể tham gia vào dataframe sau đó. Tôi đã nghĩ đến việc sử dụng Apache POI và lưu nó dưới dạng CSV và sau đó đọc csv trong dataframe. Nhưng nếu có bất kỳ thư viện hoặc API nào có thể trợ giúp trong Quy trình này sẽ dễ dàng. Bất kỳ sự trợ giúp nào cũng được đánh giá cao.Cách xây dựng Dataframe từ tệp Excel (xls, xlsx) trong Scala Spark?

+0

Kiểm tra câu trả lời này cho người mới với các bước https://stackoverflow.com/a/47721326/2112382 – vijayraj34

Trả lời

8

Giải pháp cho vấn đề của bạn là sử dụng phụ thuộc Spark Excel trong dự án của bạn.

Spark Excel có linh hoạt options để chơi cùng.

Tôi đã thử nghiệm đoạn mã sau để đọc từ excel và chuyển nó sang dataframe và nó chỉ hoạt động hoàn hảo

def readExcel(file: String): DataFrame = sqlContext.read 
    .format("com.crealytics.spark.excel") 
    .option("location", file) 
    .option("useHeader", "true") 
    .option("treatEmptyValuesAsNulls", "true") 
    .option("inferSchema", "true") 
    .option("addColorColumns", "False") 
    .load() 

val data = readExcel("path to your excel file") 

data.show(false) 

bạn có thể cho sheetname như option nếu excel sheet của bạn có nhiều tờ

.option("sheetName", "Sheet2") 

Tôi hy vọng nó hữu ích

2

Ngoài ra, bạn có thể sử dụng thư viện HadoopOffice (https://github.com/ZuInnoTe/hadoopoffice/wiki), hỗ trợ các tài liệu Excel được mã hóa và sổ làm việc được liên kết, cùng với các tính năng khác. Tất nhiên Spark cũng được hỗ trợ.

+0

Xin chào tất cả, chúng ta có thể sử dụng ở trên để ghi dữ liệu vào nhiều tab trong một bảng excel ?. – Bharath

+0

Tôi giả sử bạn có nghĩa là nhiều trang tính trong sổ làm việc Excel. Có, nó có thể ghi vào nhiều trang tính. Về cơ bản bạn xác định SpreadSheetCellDAO chỉ định định dạngValue, Comment, Formula, Address và Sheet. Tuy nhiên, để hỗ trợ bạn nhiều hơn, tôi sẽ cần phải biết thêm về trường hợp sử dụng của bạn. Vui lòng cung cấp thông tin dưới dạng vấn đề Github: https://github.com/ZuInnoTe/hadoopoffice/issues –

4

Dưới đây là đọcviết ví dụ để đọc từ và ghi vào excel với tập hợp đầy đủ các tùy chọn. ..

Nguồn spark-excel from crealytics

Scala API Spark 2.0+:

Tạo một DataFrame từ file Excel

import org.apache.spark.sql.SQLContext 

val sqlContext = new SQLContext(sc) 
val df = sqlContext.read 
    .format("com.crealytics.spark.excel") 
    .option("sheetName", "Daily") // Required 
    .option("useHeader", "true") // Required 
    .option("treatEmptyValuesAsNulls", "false") // Optional, default: true 
    .option("inferSchema", "false") // Optional, default: false 
    .option("addColorColumns", "true") // Optional, default: false 
    .option("startColumn", 0) // Optional, default: 0 
    .option("endColumn", 99) // Optional, default: Int.MaxValue 
    .option("timestampFormat", "MM-dd-yyyy HH:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss[.fffffffff] 
    .option("maxRowsInMemory", 20) // Optional, default None. If set, uses a streaming reader which can help with big files 
    .option("excerptSize", 10) // Optional, default: 10. If set and if schema inferred, number of rows to infer schema from 
    .schema(myCustomSchema) // Optional, default: Either inferred schema, or all columns are Strings 
    .load("Worktime.xlsx") 

Viết DataFrame đến một Tệp Excel

df.write 
    .format("com.crealytics.spark.excel") 
    .option("sheetName", "Daily") 
    .option("useHeader", "true") 
    .option("dateFormat", "yy-mmm-d") // Optional, default: yy-m-d h:mm 
    .option("timestampFormat", "mm-dd-yyyy hh:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss.000 
    .mode("overwrite") 
    .save("Worktime2.xlsx") 

Lưu ý: Thay vì sheet1 hoặc Sheet2 bạn có thể sử dụng tên của họ cũng .. trong ví dụ này đưa ra ở trên Daily là tên sheet.

  • Nếu bạn muốn sử dụng nó từ vỏ spark ...

gói này có thể được bổ sung vào Spark sử dụng tùy chọn dòng lệnh --packages.Ví dụ, để bao gồm nó khi khởi động vỏ spark:

$SPARK_HOME/bin/spark-shell --packages com.crealytics:spark-excel_2.11:0.9.8 
  • Dependencies cần được thêm vào (trong trường hợp của maven vv ...):
groupId: com.crealytics 
artifactId: spark-excel_2.11 
version: 0.9.8 

Mẹo: Đây là cách tiếp cận rất hữu ích đặc biệt cho các văn bản trường hợp thử nghiệm maven nơi bạn có thể đặt tấm excel với dữ liệu mẫu trong excel src/main/resources thư mục và bạn có thể truy cập chúng trong trường hợp của bạn đơn vị kiểm tra (scala/java), mà tạo ra DataFrame [s] ra khỏi bảng excel ...

Một datasourc Spark e cho thư viện HadoopOffice. Nguồn dữ liệu Spark này giả sử ít nhất là Spark 2.0.1. Tuy nhiên, thư viện HadoopOffice có thể cũng được sử dụng trực tiếp từ Spark 1.x. Hiện nay nguồn dữ liệu này hỗ trợ các định dạng sau của thư viện HadoopOffice:

Excel Datasource định dạng: org.zuinnote.spark.office.Excel Bốc Tiết kiệm cũ Excel (.xls) và mới Excel (.xlsx) nguồn dữ liệu này là sẵn trên Spark-packages.org và trên Maven Central .

Các vấn đề liên quan