scala - 如何在spark/scala中将excel数据读入数据框

标签 scala apache-spark dataframe apache-spark-sql

我有一个要求,我需要读取 Spark/scala 中的 excel 文件(扩展名为 .xlsx)。我需要创建一个数据框,其中包含从 Excel 读取的数据,并在其上应用/写入 SQL 查询以进行一些分析。 Excel 文件有一些列标题/标题,如“time_spend_company(年)”、“average_monthly_hours(小时)”等,作为标题本身的空格,这些空格导致我在加载的数据帧上应用任何 SQL 查询时遇到问题。

我正在使用com.crealytics.spark.excel库来解析Excel内容,我的代码如下所示

val empFile = "C:\\EmpDatasets.xlsx"

val employeesDF = sc.sqlContext.read
  .format("com.crealytics.spark.excel")
  .option("sheetName", "Sheet1")
  .option("useHeader", "true")
  .option("treatEmptyValuesAsNulls", "false")
  .option("inferSchema", "false")
  .option("location", empFile)
  .option("addColorColumns", "False")
  .load()

employeesDF.createOrReplaceTempView("EMP")

我想在这些列上应用一些 group by 和其他聚合函数,我遇到了如下这些列的问题,我的要求是在 time_spent_company 列上应用 group by 并获取计数它。

val expLevel = sc.sqlContext.sql("Select 'time_spend_company (Years)' as 'Years_spent_in_company',count(1) from EMP where left_company = 1 group by 'time_spend_company (Years)'")
expLevel.show

我需要以下方面的帮助:-

  1. 有没有更好的方法来加载 Excel 并为其分配自定义列名称并创建数据框?
  2. 如何为这些包含空格的列名编写sql查询?

注意:我只需将其作为 Excel 文件读取,无法转换为 csv 或任何其他文件格式。

最佳答案

对于版本0.13.5,您将需要一组不同的参数:

def readExcel(file: String): DataFrame = {
    sqlContext.read
      .format("com.crealytics.spark.excel")
      .option("dataAddress", "'sheet_name'!A1") // Optional, default: "A1"
      .option("header", "true") // Required
      .option("treatEmptyValuesAsNulls", "false") // Optional, default: true
      .option("inferSchema", "true") // Optional, default: false
      .option("addColorColumns", "false") // Optional, default: false
      .option("timestampFormat", "MM-dd-yyyy HH:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss[.fffffffff]
      .option("maxRowsInMemory", 20) // Optional, d[#All]efault None. If set, uses a streaming reader which can help with big files
      .load(file)
  }

maven 依赖:

<dependency>
  <groupId>com.crealytics</groupId>
  <artifactId>spark-excel_2.11</artifactId>
  <version>0.13.5</version>
</dependency>

关于scala - 如何在spark/scala中将excel数据读入数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442333/

相关文章:

scala - 无法在 scala 中将字符串转换为 long

python - 没有名为 'resource' 的模块在 Windows 上安装 Apache Spark

python - 具有日期列的 df 在当前和下一行的日期之间添加持续时间列

Scala ~>(波形符大于)运算符

连续产品的Scala解决方案

scala - 为什么Spark的 “Detected cartesian product for INNER join between logical plans”失败?

python - 过滤列值并收到 future 警告和类型错误?

apache-spark - 使用 map 创建新列

Scala 用参数化类型来体现

java - 如何使用 java 以编程方式检索 yarn 的日志