Sha*_*ala 10 excel scala apache-spark apache-spark-sql
我有一个Excel(xlsx and xls)包含多个工作表的大文件,我需要将其转换为RDD或者Dataframe以后可以将其连接到其他工作表dataframe.我正在考虑使用Apache POI并将其保存为a CSV然后读csv入dataframe.但是,如果有任何库或API可以帮助这个过程很容易.任何帮助都非常感谢.
Ram*_*jan 19
您的问题的解决方案是Spark Excel在项目中使用依赖项.
Spark Excel具有灵活性options.
我已经测试了下面的代码来读取excel和转换它dataframe,它只是完美的工作
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)
Run Code Online (Sandbox Code Playgroud)
你可以给sheetname的option,如果你的Excel工作表中有多个工作表
.option("sheetName", "Sheet2")
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助
以下是读取和写入示例,用于读取和写入带有完整选项的 excel ...
Scala API Spark 2.0+:
从Excel文件创建DataFrame
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")
Run Code Online (Sandbox Code Playgroud)
将DataFrame写入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")
Run Code Online (Sandbox Code Playgroud)
注意:您可以使用其名称来代替sheet1或sheet2 ..在上面给出的示例中,每日是工作表名称.
可以使用--packages命令行选项将此包添加到Spark .例如,要在启动spark shell时包含它:
$SPARK_HOME/bin/spark-shell --packages com.crealytics:spark-excel_2.11:0.9.8
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)groupId: com.crealytics artifactId: spark-excel_2.11 version: 0.9.8
提示:这是非常有用的方法,特别是对于编写maven测试用例,您可以在excel
src/main/resources文件夹中放置带有示例数据的excel表, 并且可以在单元测试用例(scala/java)中访问它们,这会创建DataFrameexcel表中的[s] ...
HadoopOffice库的Spark数据源.此Spark数据源至少假定Spark 2.0.1.但是,HadoopOffice库也可以直接从Spark 1.x中使用.目前,此数据源支持HadoopOffice库的以下格式:
Excel数据源格式:
org.zuinnote.spark.office.Excel加载和保存旧Excel(.xls)和新Excel(.xlsx)此数据源可在Spark-packages.org和Maven Central上获得.
| 归档时间: |
|
| 查看次数: |
32827 次 |
| 最近记录: |