복붙노트

[SCALA] 어떻게 스칼라 스파크에서 엑셀 (XLS, XLSX) 파일에서 Dataframe을 구성하는?

SCALA

어떻게 스칼라 스파크에서 엑셀 (XLS, XLSX) 파일에서 Dataframe을 구성하는?

나는 큰 엑셀 (XLSX 및 XLS) 여러 시트 파일을 가지고 있고 나중에 다른 dataframe에 가입 ​​할 수 있도록 내가 RDD 또는 Dataframe로 변환 할 필요가있다. 나는 CSV로 아파치 POI를 사용하고 저장을 생각하고 dataframe에 CSV를 읽었습니다. 어떤 라이브러리 나 API를이 있다면 그러나이 과정에서 캔 도움이 쉬울 것이다. 어떤 도움을 매우 높이 평가된다.

해결법

  1. ==============================

    1.문제에 대한 해결책은 프로젝트에서 스파크 엑셀 의존성을 사용하는 것입니다.

    문제에 대한 해결책은 프로젝트에서 스파크 엑셀 의존성을 사용하는 것입니다.

    스파크 엑셀로 재생하는 유연한 옵션이 있습니다.

    나는 엑셀 읽고 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)
    

    엑셀 시트를 여러 장있는 경우 당신은 옵션으로 시트 이름을 제공 할 수 있습니다

    .option("sheetName", "Sheet2")
    

    나는 그것의 도움을 바란다

  2. ==============================

    2.여기에 읽기 및 쓰기 예제 옵션의 전체 세트로 엑셀로에서 읽기 및 쓰기에 ...

    여기에 읽기 및 쓰기 예제 옵션의 전체 세트로 엑셀로에서 읽기 및 쓰기에 ...

    crealytics에서 소스 스파크 엑셀

    스칼라 API 스파크 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")
    

    Excel 파일에 DataFrame 쓰기

    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")
    

    이 패키지는 명령 줄 옵션을 --packages 사용하여 불꽃을 추가 할 수 있습니다. 스파크 쉘을 시작할 때 예를 들어, 포함하는 :

    $SPARK_HOME/bin/spark-shell --packages com.crealytics:spark-excel_2.11:0.9.8
    
  3. ==============================

    3.또는, 다른 기능 사이에, 또한 암호화 된 엑셀 문서와 연결된 통합 문서를 지원하는 HadoopOffice 라이브러리 (https://github.com/ZuInnoTe/hadoopoffice/wiki)를 사용할 수 있습니다. 물론 불꽃도 지원됩니다.

    또는, 다른 기능 사이에, 또한 암호화 된 엑셀 문서와 연결된 통합 문서를 지원하는 HadoopOffice 라이브러리 (https://github.com/ZuInnoTe/hadoopoffice/wiki)를 사용할 수 있습니다. 물론 불꽃도 지원됩니다.

  4. ==============================

    4.내가 com.crealytics.spark.excel - 0.11 버전 항아리를 사용하고 스파크 자바에서 만든, 그냥 SparkContext에 javaSparkContext을 변경할 필요도 스칼라에서 동일하다.

    내가 com.crealytics.spark.excel - 0.11 버전 항아리를 사용하고 스파크 자바에서 만든, 그냥 SparkContext에 javaSparkContext을 변경할 필요도 스칼라에서 동일하다.

    tempTable = new SQLContext(javaSparkContxt).read()
        .format("com.crealytics.spark.excel") 
        .option("sheetName", "sheet1")
        .option("useHeader", "false") // Required 
        .option("treatEmptyValuesAsNulls","false") // Optional, default: true 
        .option("inferSchema", "false") //Optional, default: false 
        .option("addColorColumns", "false") //Required
        .option("timestampFormat", "MM-dd-yyyy HH:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss[.fffffffff] .schema(schema)
        .schema(schema)
        .load("hdfs://localhost:8020/user/tester/my.xlsx");
    
  5. from https://stackoverflow.com/questions/44196741/how-to-construct-dataframe-from-a-excel-xls-xlsx-file-in-scala-spark by cc-by-sa and MIT license