2017-12-02 4 views
3
|T 2009-08-26 17:1...| 
|U http://twitter....| 
|  W No Post Title| 
|     | 
|T 2009-11-01 02:4...| 
|U http://twitter....| 
|  W No Post Title| 
|     | 
|T 2009-11-18 16:5...| 
|U http://twitter....| 
|  W No Post Title| 
|     | 

今私はこのようなデータを持っています 私は4行ごとにグループ化したいと思います。連続した3行のデータセットをロードする方法

だから、1つの行が

T 2009-X-XX U http://xxxx  W xxxxxxx" 

が可能ということですが含まれますか? あるいは、ヘッダをT UとWとするCSVファイルに変換する方法はありますか?おかげさまで

+0

は、それがすべての空行が含まれていることを一貫性のある形式です3行(それは1つと考えられるべきですか?) –

答えて

1

あなたのような3行のテキスト形式を扱う独自のカスタムTextBasedFileFormatを書くことが唯一の解決策だと思います。

インスピレーションのためorg.apache.spark.sql.execution.datasources.csv.CSVFileFormatを参照してください。


CSVFileFormatが行区切りとして空行と容易にフォーマットを扱うことができることを可能とすることができます。

1

次のデータフレームのフォーマットでそれらを得ることができればあなたが簡単に行をマージすることができます:あなたが行うことができます

+-------+--------------------+ 
|line_nr|    line| 
+-------+--------------------+ 
|  0|T 2009-08-26 17:...| 
|  1|U http://twitter...| 
|  2|  W No Post Title| 
|  3|     | 
|  4|T 2009-11-01 02:...| 
|  5|U http://twitter...| 
|  6|  W No Post Title| 
|  7|     | 
|  8|T 2009-11-18 16:...| 
|  9|U http://twitter...| 
|  10|  W No Post Title| 
|  11|     | 
+-------+--------------------+ 

ザ・:

df 
    .groupBy((floor(($"line_nr")/4)).as("line_group")) 
    .agg((concat_ws("", collect_list($"line"))).as("line")) 
    .show(false) 

+----------+----------------------------------------------------------------------------------+ 
|line_group|line                    | 
+----------+----------------------------------------------------------------------------------+ 
|0   |T 2009-08-26 17:1...U http://twitter....  W No Post Title     | 
|1   |T 2009-11-01 02:4...U http://twitter....  W No Post Title     | 
|2   |T 2009-11-18 16:5...U http://twitter....  W No Post Title     | 
+----------+----------------------------------------------------------------------------------+ 
関連する問題