2017-09-24 5 views
0

ダイナミックXMLファイルをロードし、データをデータフレームに変換しようとしました。 ScalaのAPIを使用して、私のXMLのexempleSpark XML - スキーマを指定してXMLをロードする際にstruct type文字列を適用する方法

<?xml version="1.0"?> 
<catalog> 
    <book id="bk104"> 
    <title>Oberon</title> 
    <code>000010</code> 
    </book> 
    <book id="bk106"> 
    <title>Lover</title> 
    <code>000030</code> 
    </book> 
</catalog> 

val df = sqlContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "book") 
    .load("books.xml") 

私は私のデータフレームのスキーマを表示しよう:

root 
    |-- title: string (nullable = true) 
    |-- price: float (nullable = true) 
    |-- code: long (nullable = true) 

問題がある:値000010(コード)は、Scala APIがIntegerとして考えるので、ディスプレイ10です。

値 "000010"を保持する文字列として "code"列を読み取るソリューションはありますか? P/S:

パス:ファイルの場所読み込むXMLのAPIは、いくつかのオプションを受け入れるファイルときので、私のプロジェクトでは、いくつかのcontraintsの、指定したスキーマの溶液は

val df = sqlContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "book") 
    .schema(customSchema) 
    .load("books.xml") 

答えて

-1

をお勧めしません。 Sparkと同様に、標準のHadoopグロビング表現を受け入れることができます。

rowTag:行として扱うxmlファイルの行タグ。たとえば、このxml ...では、適切な値はbookになります。デフォルトはROWです。現時点では、セルフクローズXMLタグを含む行はサポートされていません。

samplingRatio:推定スキーマのサンプリング比率(0.0〜1)。デフォルトは1です。可能なタイプは、ユーザーがスキーマを提供しない限り、StructType、ArrayType、StringType、LongType、DoubleType、BooleanType、TimestampTypeおよびNullTypeです。

excludeAttribute:要素内の属性を除外したいかどうかを指定します。デフォルトはfalseです。

treatEmptyValuesAsNulls:(廃止されました:nullValueを ""に設定します)空白をnull値として扱いたいかどうかを指定します。デフォルトはfalseです mode:解析中に破損したレコードを処理するモードです。デフォルトはPERMISSIVEです。 PERMISSIVE:壊れたレコードを満たしたときに他のフィールドをnullに設定し、不正な文字列をcolumnNameOfCorruptRecordで設定された新しいフィールドに格納します。ユーザーがスキーマを設定すると、追加のフィールドにはnullが設定されます。 DROPMALFORMED:破損したレコード全体を無視します。 FAILFAST:壊れたレコードを満たすと例外がスローされます。

columnNameOfCorruptRecord:不正な文字列が格納されている新しいフィールドの名前。デフォルトは_corrupt_recordです。

attributePrefix:属性と要素を区別できるように属性の接頭辞。これはフィールド名の接頭辞になります。デフォルトは_です。

valueタグ:子を持たない要素に属性がある場合の値に使用されるタグ。デフォルトは_VALUEです。

文字セット「UTF-8」にデフォルト設定が、他の有効な文字セット名

ignoreSurroundingSpacesに設定することができます。読まれた値から周囲の空白をスキップする必要があるかどうかを定義します。デフォルトはfalseです。

現在、はありません。は、特定のフィールドのスキーマを明示的に推測してXMLファイルを読み取ることができません。

したがって、この場合はスキーマを明示的に定義する必要があります。

出典:https://github.com/databricks/spark-xml

関連する問題