복붙노트

[SCALA] 어떻게 CSV 파일에서 스키마를 만들고 파일에 해당 스키마 저장 / 유지하기 위해?

SCALA

어떻게 CSV 파일에서 스키마를 만들고 파일에 해당 스키마 저장 / 유지하기 위해?

나는 10 열 CSV 파일이 있습니다. 반 문자열 절반은 정수이다.

스칼라 코드는 무엇입니까 :

지금까지이있다 :

import org.apache.spark.sql.SQLContext

val sqlContext = new SQLContext(sc)
val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .load("cars.csv")

그리고 그 스키마를 저장하기위한 최적의 파일 형식은 무엇입니까? 그것은 JSON인가?

목표는 - 내가 파일에서 대신 즉석에서 그것을 다시 만드는 한 번만 스키마와 다음에 부하를 만들려고합니다.

감사.

해결법

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

    1.JSON은 자연 선택 때문에 데이터 형식 API는 필요한 모든 유틸리티를 제공 :

    JSON은 자연 선택 때문에 데이터 형식 API는 필요한 모든 유틸리티를 제공 :

    import org.apache.spark.sql.types._
    import scala.util.Try
    
    val df = Seq((1L, "foo", 3.0)).toDF("id", "x1", "x2")
    val serializedSchema: String = df.schema.json
    
    
    def loadSchema(s: String): Option[StructType] =
      Try(DataType.fromJson(s)).toOption.flatMap {
        case s: StructType => Some(s)
        case _ => None 
      }
    
    loadSchema(serializedSchema)
    

    이 파일이 쓰기, 또는 스파크 RDD를 해킹 표준 스칼라 방법을 사용 할 수 있습니다 요구 사항에 따라 :

    val schemaPath: String = ???
    
    sc.parallelize(Seq(serializedSchema), 1).saveAsTextFile(schemaPath)
    val loadedSchema: Option[StructType] = sc.textFile(schemaPath)
      .map(loadSchema)  // Load
      .collect.headOption.flatten  // Make sure we don't fail if there is no data
    

    파이썬 동등한를 들어 PySpark에서 JSON 스키마 구조를 정의하는 구성 파일을 참조하십시오

  2. from https://stackoverflow.com/questions/42004245/how-to-create-a-schema-from-csv-file-and-persist-save-that-schema-to-a-file by cc-by-sa and MIT license