2017-03-12 32 views
0

最近我想做火花机学习实验室从星火峰会2016年培训视频是here,并远销笔记本可here.如何读取多个Excel文件并将它们连接成一个Apache Spark DataFrame?

在实验室中使用的数据集可以从UCI Machine Learning Repository下载。它包含来自燃气发电厂各种传感器的读数。格式是带有五个工作表的xlsx文件。

要使用实验室中的数据,我需要读取Excel文件中的所有表单并将它们连接成一个Spark DataFrame。在培训期间,他们使用Databricks Notebook,但我使用IntelliJ IDEA和Scala并在控制台中评估代码。

第一步是将所有Excel工作表保存到单独的xlsx文件中,名称分别为sheet1.xlxs,sheet2.xlsx等,并将它们放到sheets目录中。

如何读取所有Excel文件并将它们连接成一个Apache Spark DataFrame?

回答

1

为此,我使用了spark-excel包。它可以添加到build.sbt文件:libraryDependencies += "com.crealytics" %% "spark-excel" % "0.8.2"

在IntelliJ IDEA的斯卡拉控制台来执行代码为:

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.sql.{SparkSession, DataFrame} 
import java.io.File 

val conf = new SparkConf().setAppName("Excel to DataFrame").setMaster("local[*]") 
val sc = new SparkContext(conf) 
sc.setLogLevel("WARN") 

val spark = SparkSession.builder().getOrCreate() 

// Function to read xlsx file using spark-excel. 
// This code format with "trailing dots" can be sent to IJ Scala Console as a block. 
def readExcel(file: String): DataFrame = spark.read. 
    format("com.crealytics.spark.excel"). 
    option("location", file). 
    option("useHeader", "true"). 
    option("treatEmptyValuesAsNulls", "true"). 
    option("inferSchema", "true"). 
    option("addColorColumns", "False"). 
    load() 

val dir = new File("./data/CCPP/sheets") 
val excelFiles = dir.listFiles.sorted.map(f => f.toString) // Array[String] 

val dfs = excelFiles.map(f => readExcel(f)) // Array[DataFrame] 
val ppdf = dfs.reduce(_.union(_)) // DataFrame 

ppdf.count() // res3: Long = 47840 
ppdf.show(5) 

控制台输出:

+-----+-----+-------+-----+------+ 
| AT| V|  AP| RH| PE| 
+-----+-----+-------+-----+------+ 
|14.96|41.76|1024.07|73.17|463.26| 
|25.18|62.96|1020.04|59.08|444.37| 
| 5.11| 39.4|1012.16|92.14|488.56| 
|20.86|57.32|1010.24|76.64|446.48| 
|10.82| 37.5|1009.23|96.62| 473.9| 
+-----+-----+-------+-----+------+ 
only showing top 5 rows 
0

我们需要火花的Excel库为此,可以从

https://github.com/crealytics/spark-excel#scala-api

  1. 克隆从上面的github链路git的项目并生成使用“SBT包”
  2. 使用火花2运行火花壳

火花壳--driver级路径./火花excel_2.11-0.8.3.jar --master =纱线客户

  • 导入必要
  • import org.apache.spark.sql._
    import org.apache.spark.sql.functions。_
    val sqlContext = new SQLContext(sc)

  • 集的Excel文档路径
  • val document = "path to excel doc"

  • 执行下面用于创建数据帧的功能
  • val dataDF = sqlContext.read 
              .format("com.crealytics.spark.excel") 
              .option("sheetName", "Sheet Name") 
              .option("useHeader", "true") 
              .option("treatEmptyValuesAsNulls", "false") 
              .option("inferSchema", "false") 
              .option("location", document) 
              .option("addColorColumns", "false") 
              .load(document) 
    

    这一切!现在您可以在dataDF对象上执行Dataframe操作。

    相关问题