私のsparkアプリケーションはcsvファイルを読み込み、sqlを使用して別のフォーマットに変換し、結果のデータフレームを別のcsvファイルに書き込みます。次のようにcsvカラムのnull値をnullデータ型として処理するスパーク
例えば、私は、入力CSVを持っている:
Id|FirstName|LastName|LocationId
1|John|Doe|123
2|Alex|Doe|234
私の変換は、次のとおりです。
Select Id,
FirstName,
LastName,
LocationId as PrimaryLocationId,
null as SecondaryLocationId
from Input
ヌルがSecondaryLocationIdとして使用されている理由を、私は答えることができない(それがビジネスであります使用例) sparkがSecondaryLocationIdのデータ型を認識できず、スキーマにnullを返してエラーをスローするCSVデータソースはnullデータ型を出力CSVに書き込んでいる間はサポートしていません。
以下は、使用しているprintSchema()と書き込みオプションです。
root
|-- Id: string (nullable = true)
|-- FirstName: string (nullable = true)
|-- LastName: string (nullable = true)
|-- PrimaryLocationId: string (nullable = false)
|-- SecondaryLocationId: null (nullable = true)
dataFrame.repartition(1).write
.mode(SaveMode.Overwrite)
.option("header", "true")
.option("delimiter", "|")
.option("nullValue", "")
.option("inferSchema", "true")
.csv(outputPath)
デフォルトのデータ型(文字列など)には方法がありますか? ところで、ヌルを空の文字列( '')に置き換えて、これを動作させることができますが、これは私がしたいことではありません。
これは、どの列がNULLデータ型として扱われるかを知っているときのみです。多数のファイルが読み込まれていて、さまざまな変換が適用されると、私は知らないでしょうか、またはどのフィールドがnullであるかを知る方法がありますか? – tturner