2017-10-17 9 views
0

下のcsvファイルとしてスキーマ情報を受け取ります。私はどのようにこのシナリオではSPARKで動的にスキーマを生成するために約100 +列スパーク:csvファイルからの動的スキーマ定義

FIRSTNAME|VARCHAR2 
LASTANME|VARCHAR2 
MIDDLENAME|VARCHAR2 
BIRTHDATE|DATE 
ADULTS|NUMBER 
ADDRESS|VARCHAR2 

があると?

+0

あなたはヘッダー列などの何らかの種類のコードを投稿していますか?それが何であるかを明確にし、正確なフォーマットを明確にしていない場合は明記してください。 –

答えて

0

スキーマファイルが有効な形式のcsvであると仮定して、文字列分割とパターンマッチングを使用できます。あなたはすでにスキーマは、単一のコンマ区切りの文字列として読み込まれていると仮定すると、次のように動作します:

def toSchema(str: String) = { 
    val structFields = str.split(",").map{ s => 
    val split = s.split("\\|") 
    val name: String = split.head 
    val typeStr = split.tail.head 

    val varCharPattern = "varchar[0-9]+".r 
    val datePattern = "date".r 
    val numPattern = "number".r 

    val t = typeStr.toLowerCase match{ 
     case varCharPattern() => StringType 
     case datePattern() => TimestampType 
     case numPattern() => IntegerType 
     case _ => throw new Exception("unknown type string") 
    } 
    StructField(name, t) 
    } 
    StructType(structFields) 
} 

あなただけのパターンマッチングステートメントに新しいケースを追加することにより、容易に十分なより多くの種類を追加することができます。

関連する問題