データが不正確に分割されているデータセットがあります。この結果、列数が不均一になります.1行あたりの列数は、1つのフィールドから発生するエラー数によって異なります。先頭に3つの二重引用符がある場合は、列が正しくないかどうかがわかります。列に3つの先行する二重引用符がある場合は、前の列と結合して左に移動します。Spark:条件付き結合/連結列ベースの先頭の文字
データのcsvをデータフレームにインポートします。このデータフレームは、以下の例のように作成されます。
例:
INPUT:
`+--+--------+----------+----------+---------+
|id | detail | context | _c3 | _c4|
+---+--------+----------+----------+---------+
| 1 | {blah} | service | null | null |
| 2 | { blah | """ blah | """blah} | service |
| 3 | { blah | """blah} | service | null |
+---+--------+----------+----------+---------+`
所望の出力:
`+--+------------------------+---------+
|id | detail | context |
+---+------------------------+---------+
| 1 | {blah} | service |
| 2 | { blah""" blah"""blah} | service |
| 3 | { blah"""blah} | service |
+---+------------------------+---------+`
私が何かしようとした - だけでなく、他のアプローチの束:
`df.filter(col("context").startsWith("\"\"\"")).select($"detail", lit(" "), $"context").collect()`
を
私はそれが必要なものを完全には行いません。何か案は?ヘルプは大いに感謝しています:)
ありがとう!
この例では3つの予期された列がありますが、実際の表には10以上の予想列があります。あなたはまだこのアプローチを採用しますか? – Keren
私はこのアプローチで遊んできました。上記の表では、列は実際には ""ではなく ""ではありません。だから、これが実際に計算されるとき、あなたはいくつかの狂った探しの列を取得します...あなたはnullをどう扱うでしょうか? – Keren
複数の列を連結するときに正しい順序であれば、任意の数の列を使用できます。また、nullを空の文字列に変換するDataFrameNaFunctions(特に塗りつぶし)だけが可能です。私はこれを行うための答えを更新しました。 – RyanW