2017-03-12 40 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操作。

    相關問題