2017-02-03 55 views
0

我想從hdfs讀取模式以加載到我的數據框中。這允許架構更新並位於Spark Scala代碼之外。我想知道做這件事的最好方法是什麼?以下是我目前在代碼中的內容。更新數據幀架構讀取Spark Scala

val schema_example = StructType(Array(
    StructField("EXAMPLE_1", StringType, true), 
    StructField("EXAMPLE_2", StringType, true), 
    StructField("EXAMPLE_3", StringType, true)) 

def main(args: Array[String]): Unit = { 
    val df_example = get_df("example.txt", schema_example) 
} 

def get_df(filename: String, schema: StructType): DataFrame = { 
    val df = sqlContext.read 
     .format("com.databricks.spark.csv") 
     .option("delimiter","~") 
     .schema(schema) 
     .option("quote", "'") 
     .option("quoteMode", "ALL") 
     .load(filename) 
    df.select(df.columns.map(c => trim(col(c)).alias(c)): _*) 
    } 
+0

您是否考慮過使用parquet dataformat,該文件既具有schema中的文件,又支持優秀的壓縮和優化? –

回答

0

更好的辦法是從HOCON Config文件中讀取Schema,它可以在需要時更新。

schema[ 
    { 
    columnName = EXAMPLE_1 
    type = string 
    }, 
    { 
    columnName = EXAMPLE_2 
    type = string 
    }, 
    { 
    columnName = EXAMPLE_3 
    type = string 
    } 
] 

他們可以讀取使用ConfigFactory這個文件。 這將是更好和更乾淨的方式來維護文件架構。