CSVファイルを読み込んで解析する際に問題が発生しています。いくつかのレコードには改行記号があり、\でエスケープされ、そのレコードは引用符で囲まれていません。私はsc.textFile("file.csv")
を使用してsqlContext.read.format("..databricks..").option("escape/delimiter/...").load("file.csv")
改行文字でファイルを解析する方法でエスケープされ、引用符で囲まれていない
を使用して、それを読むことを試みた
Line1field1;Line1field2.1 \
Line1field2.2;Line1field3;
Line2FIeld1;Line2field2;Line2field3;
しかし、私はそれを読んでどのように重要ではありません、記録/ライン/行が作成されたときに ":ファイルは、次のようになります。 \ \ n "に達しました。だから、代わりに前のファイルから2つのレコードを有するので、私は3を取得しています:
[Line1field1,Line1field2.1,null] (3 fields)
[Line1field.2,Line1field3,null] (3 fields)
[Line2FIeld1,Line2field2,Line2field3;] (3 fields)
期待される結果は次のとおりです。
[Line1field1,Line1field2.1 Line1field.2,Line1field3] (3 fields)
[Line2FIeld1,Line2field2,Line2field3] (3 fields)
(改行記号がレコードに保存されているどのようにそれは重要ではありません、主な問題は、レコード/行の正しいセットを持っている)
これを行う方法のアイデア?元のファイルを変更せずに、好ましくはポスト/再処理なしで(例えば、ファイルを読み込んで、予想よりもフィールド数が少ないラインをフィルタリングし、それらを連結することは解決策になる可能性がありますが、最適ではありません)
私の希望は、databrickのcsvパーサーを使用してエスケープ文字を\(デフォルトであるはずです)に設定することでしたが、これはうまくいかなかった[ java.io.IOException: EOF whilst processing escape sequence
というエラーが出ました。
私は何とかパーサーを拡張して何かを編集して、自分のパーサを作成する必要がありますか?どのソリューションが最適でしょうか?
ありがとうございます!
EDIT:言及するのを忘れ、私は1.6
おかげですが、所望の出力を得るために、いくつかの代替と分裂を行う必要があります!完璧に動作します:) – perico
私の喜び@perico、あなたが適格になったときupvoteを忘れないでください:) –